开发者每年为内容管理工具支付的费用,足够买一台MacBook Pro——但你的内容其实一直躺在免费的地方。
这是独立开发者朝日富士(Asahi Fujita)在构建StructCMS时的发现。他用一个npm包,把GitHub仓库变成了无头内容管理系统(Headless CMS)的后端,零服务器成本,零月租费。
无头CMS的账单困境
朝日富士是Jamstack架构的忠实用户。Next.js项目做了不少——个人作品、客户委托、副业产品。静态生成优先、动态按需加载、随处部署的模式,他很熟悉。
但每次需要管理内容时,同一堵墙准时出现。
云端的Contentful、Sanity、Prismic确实好用。但定价层级对独立开发者形同惩罚:三个项目、预算有限,免费起步,稍一增长就要判断"一个博客值不值得每月99美元"。
开源替代方案Strapi、Payload、Directus功能强大,但需要服务器和数据库。这不是抱怨,只是不符合需求——为一篇博客文章配置基础设施,本末倒置。
他真正想要的是:免费、云原生、无服务器运行、无需信用卡的无头CMS。
然后意识到:GitHub已经具备了所有条件。
GitHub作为内容仓库的隐藏属性
GitHub仓库开箱即用的能力清单:
文件存储(Markdown、JSON、图片);每次变更的版本历史;完整的REST API读取任意文件;基于令牌的访问控制;零托管成本。
它不是CMS,但具备构建CMS所需的全部基础设施。
朝日富士构建了@asahi-fj/structcms——一个轻量npm包,从GitHub仓库获取并转换内容,输出为应用可直接消费的结构化数据。
安装与调用代码极简:
npm install @asahi-fj/structcms
三行配置:令牌、仓库所有者、仓库名。返回带类型的内容。这就是全部设置。
现有方案为何不够
Outstatic、Decap CMS、Contentlayer等项目的功能有重叠,但边界清晰。
Outstatic要求内容与代码同仓库;Decap CMS依赖Netlify或Git Gateway;Contentlayer从本地文件系统读取,适合单体仓库,无法跨项目共享内容。
核心差异:这些工具都不支持"指向任意GitHub仓库(无论所有者是谁)、仅凭令牌获取内容"的工作流。
分离的内容仓库、私有仓库支持、零基础设施——这个特定组合,市场上没有现成产品。
需求明确,方案自建。
内容结构的刻意简化
内容存放在contents/目录下。每个条目是一个以slug命名的文件夹,内含两个文件:
your-content-repo/
└── contents/
├── hello-world/
│ ├── content.md
│ └── meta.json
└── getting-started/
├── content.md
└── meta.json
meta.json处理结构化元数据:标题、发布时间、草稿状态、标签数组。
content.md是纯Markdown。没有前置元数据的花招,没有特殊语法。任何编辑器都能写,提交即发布。
正方:GitHub原生架构的合理性
支持这一方案的核心论点围绕成本结构与开发者体验展开。
成本维度上,GitHub的免费层级对公开仓库无限制,私有仓库也有充足配额。对于个人开发者和小团队,这意味着内容管理的边际成本趋近于零。对比Contentful等服务的阶梯定价,GitHub的"基础设施即附赠"模式具有压倒性优势。
技术债务角度,StructCMS本身只是一个数据转换层。核心功能——存储、版本控制、API访问——由GitHub维护。项目维护负担极低,不存在数据库迁移、服务器补丁、安全更新的长期开销。
开发者体验层面,GitHub的工作流已是技术从业者的肌肉记忆。Pull Request审核内容变更、Issues追踪编辑任务、Actions触发构建流水线——这些不需要额外学习成本。内容管理被纳入既有的开发工具链,而非引入新的仪表盘和权限体系。
可移植性作为隐性收益:内容以纯文本形式存储于标准Git仓库,迁移成本极低。不存在供应商锁定,即使未来放弃StructCMS,内容文件依然可读可用。
反方:架构选择的隐性成本
质疑声音指向这一方案的非 obvious 代价。
性能瓶颈是首要顾虑。GitHub API存在速率限制:未经认证的请求每小时60次,认证后5000次。对于高流量站点,这构成硬性天花板。缓存策略可以缓解,但增加了架构复杂度——而"零基础设施"正是初始卖点。
内容编辑体验存在断层。非技术用户需要理解Git工作流:分支、提交、推送、合并。Decap CMS等工具提供基于浏览器的可视化界面,而StructCMS将编辑界面完全外包给GitHub本身或第三方编辑器。这对技术团队可行,对营销团队或外部撰稿人则是门槛。
实时协作的缺失。传统CMS支持多人同时编辑、冲突实时提示。Git的合并冲突解决机制对代码友好,对内容创作显得笨重。两个编辑者同时修改同一篇文章,需要手动解决冲突——这在新闻编辑室或活动运营场景中是致命缺陷。
权限粒度粗糙。GitHub的权限模型围绕仓库级别设计,难以实现字段级或文档级的访问控制。无法让外部作者仅能编辑特定栏目,或让审核者只能修改发布状态而不能改动正文。
可靠性依赖单一平台。GitHub的服务中断直接影响内容获取。2022年GitHub多次大规模故障,虽然罕见,但将核心基础设施绑定于单一供应商始终存在风险。
判断:边界清晰的工具,而非万能方案
StructCMS的价值不在于取代所有内容管理场景,而在于精准服务被忽视的用户群体。
这一工具最适合三类场景:技术团队维护的文档站点、个人开发者的博客矩阵、需要版本控制严格审计的内容工作流(如法律文档、技术规范)。这些场景的共同特征:编辑者具备Git操作能力、内容变更频率适中、对成本极度敏感。
不适合的场景同样明确:需要非技术编辑参与的内容运营、高并发实时访问的媒体站点、复杂权限矩阵的企业级内容治理。
朝日富士的构建决策揭示了一个被低估的产品逻辑:在成熟平台上做减法,往往比从零搭建更有效率。GitHub不是为内容管理设计的,但其通用基础设施的完备性,使得特定场景下的"误用"成为最优解。
这一模式的可复制性值得观察。Notion API、Google Sheets、甚至Figma的组件库——开发者正在重新发现"已有工具的隐藏接口"。StructCMS的启示在于:产品创新的切入点,有时不在于创造新能力,而在于重新组合现有能力的访问路径。
对于技术从业者,这一案例提供了具体的行动参照:审视你的技术栈中那些被默认使用的付费服务,追问其核心价值是否可被现有基础设施替代。答案往往指向被忽视的免费层级和原生API。
StructCMS已发布于npm。如果你正在维护多个Jamstack项目,或厌倦了为内容管理支付月费,这是一个值得评估的选项。代码仓库的结构化设计足够透明,迁移成本可控,最坏情况不过是回归原有方案——而最好的情况,是每年省下一台MacBook Pro。
热门跟贴