番外一讲清了静态站点生成器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 的 JekyllGitHub 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-cmsgiscus 官方仓库评论系统基于 GitHub Discussionshttps://github.com/giscus/giscusutterances 官方仓库评论系统基于 GitHub Issueshttps://github.com/utterance/utterancesPagefind 官网给静态站做全文索引的搜索工具https://pagefind.appAlgolia 官网站内搜索托管服务https://www.algolia.comHugo 官网Go 编写Apache-2.0https://gohugo.ioJekyll 官网Ruby 编写MIThttps://jekyllrb.comZola 官网Rust 编写MIThttps://www.getzola.orgMkDocs 官网Python 编写BSD-2-Clausehttps://www.mkdocs.orgGitHub linguist 仓库GitHub 语言条的判定依据语言清单里 C# 在列Node.js 与 .NET 不在列https://github.com/github-linguist/linguist