番外一讲清了静态站点生成器(SSG)是什么,也把 Node.js 生态里常用的五个过了遍。这篇讲 JavaScript / TypeScript 这一侧的实操:那些短板,在 Node.js 生态里具体拿什么补。补完,顺便把让人困惑的「语言标签」说清楚。
一、三条路怎么配
按「想不想保持纯静态」,Node.js 生态里对应三条路:
路线一:SSG + 直连 Git 的 CMS。 Decap、Tina、Sveltia 是这条路的三件套,正篇(三)逐个讲过。做法都一样:内容仍旧存在 Git 里,但给编辑一个能点能看的界面,不再要求他学会了 commit 才能发内容。三者主要差在界面和仓库支持上,按你团队能接受的程度挑。
它的上限很明确:够「好几个人一起填内容」用,不够「好几级人一起管内容」用。
路线二:动态部分外挂。 评论、站内搜索、表单,是被问最多的三样,做法是让静态页面去调第三方服务:评论可以挂 giscus、utterances 这类拿 GitHub 当评论后端的,搜索挂专门给静态站做索引的服务(Pagefind、Algolia),表单挂第三方收集服务。站本身依然是纯静态的那堆 HTML。
代价提前算清楚:数据握在第三方手里。服务停了、改收费了、某个接口变了,页面上那块功能就跟着没。而且这些是散在外面的三四个后台,没法统一管理。
路线三:回 Node 的真 CMS。 第一条路再往上就顶不住了:编辑团队五六个人以上、要审批流程、要定时发布、要按角色分工。这些信号一出来,说明你要的不是「带界面的静态站」,是一个真的后台。回正篇逐个讲过的那 22 个里挑:重写作和发布体验看 Ghost,要自己定义内容模型再走 API 看 Strapi,愿意写代码看 Keystone。
二、对照自己的场景
- 就你自己写,Markdown 加 Git 是日常 → 纯 SSG,别加东西;
- 三五个人填内容,站要保持静态 → SSG + Git CMS;
- 要审批、要排期、要按角色分工 → 回正篇选 Node 的 CMS;
- 站的一半是动态功能(登录、个性化、实时数据)→ 这就归应用开发管了,CMS 帮不上忙。
SSG 的短板不在 SSG,在于到底有没有人在后台填内容。
三、顺手说说「语言标签」
看完番外一和这篇,最初那个困惑也算有答案了。语言标签要分两种读,混在一张清单里看就会乱:
- GitHub 仓库的语言条 只标这个仓库用什么语言写:Node 系标的是 JavaScript / TypeScript ,.NET 系标的是 C# 。标 JS/TS 的,一大部分其实就是正篇那 22 个 Node CMS------只是仓库用 JS/TS 写的,被再标了一遍;
剩下那一小部分是 SSG。SSG 的 JS/TS 标签说的是构建工具用什么写的,跟你最终网站跑什么没有半点关系:它的产物就是一堆静态 HTML,扔到哪个静态托管都能跑。 - 榜单和 topic 的分类标签 说的是技术栈,不是仓库语言:标 PHP、Java、.NET 的,站点真的要跑在对应的服务器语言上;标 Node.js 的,是跑在 Node 上的 CMS。
顺便一提,SSG 也不是 JS 生态独有的,只是 JS 系在中文资料里出镜率高。Go 的 Hugo(速度快)、Ruby 的 Jekyll(GitHub Pages 的默认引擎)、Rust 的 Zola(单二进制、极简)、Python 的 MkDocs(技术文档顺手),都活得好好的。
所以下次再看到语言标签,别急着按标签选型:先看清它标的是仓库用什么写的,还是按技术栈分的类,再决定要不要点进去。
到这里,SSG 这半边就算讲完了:正篇五篇解决「真 CMS 怎么选」,两篇番外解决「看着像 CMS 的建站工具怎么认、短板怎么补」。选型的起点其实就一句:先确认你要的是内容管理系统,还是建站工具。方向错了,后面比一百个功能对比都白搭。
本篇数据来源:
- Decap CMS、TinaCMS、Sveltia CMS 官方仓库与文档(SSG 配直连 Git CMS 的方案,见正篇(三)数据来源):
https://github.com/decaporg/decap-cms | https://tina.io | https://github.com/sveltia/sveltia-cms - giscus 官方仓库(评论系统,基于 GitHub Discussions):https://github.com/giscus/giscus
- utterances 官方仓库(评论系统,基于 GitHub Issues):https://github.com/utterance/utterances
- Pagefind 官网(给静态站做全文索引的搜索工具):https://pagefind.app
- Algolia 官网(站内搜索托管服务):https://www.algolia.com
- Hugo 官网(Go 编写,Apache-2.0):https://gohugo.io
- Jekyll 官网(Ruby 编写,MIT):https://jekyllrb.com
- Zola 官网(Rust 编写,MIT):https://www.getzola.org
- MkDocs 官网(Python 编写,BSD-2-Clause):https://www.mkdocs.org
- GitHub linguist 仓库(GitHub 语言条的判定依据:语言清单里 C# 在列,Node.js 与 .NET 不在列):https://github.com/github-linguist/linguist