← 返回日志

Sveltia CMS 对比Keystatic 分析.

Sveltia CMSKeystatic 放在一起对比,非常有意思。它们代表了 Git-based CMS(无数据库内容管理器) 演进的两个完全不同的时代和哲学:

  • Sveltia CMS“传统 Jamstack 时代的古典改良派” —— 它是为了拯救和致敬老牌的 Decap CMS (Netlify CMS),让传统静态生成器 (Hugo, Hexo) 焕发第二春。
  • Keystatic“现代 JavaScript 时代的激进原生派” —— 它是为了配合 Astro、Next.js 等现代组件化框架,用完全前端工程化的思维来重构内容管理。

它们都在 Vercel 上跑得极顺,但在开发体验、技术绑定和编辑界面上有本质区别。以下为你做深度横向拆解:

对比维度Sveltia CMSKeystatic
底层内核Svelte(极轻、无依赖)React / Tailwind / TypeScript
配置文件config.yml (与 Decap 100% 兼容)keystatic.config.ts (TS 强类型)
引入方式CDN 单纯脚本引入,零侵入依赖包安装 (@keystatic/core)
文章排版体验传统 Markdown 语法/标准富文本表单类 Notion 体验,支持嵌套自定义组件块
本地开发模式支持 (依赖本地运行一个特定的模拟服务)极佳 (运行 npm run dev 自动跑在本地)
云端身份验证依赖 GitHub OAuth (配合 Vercel 的外部验证服务)原生支持 GitHub App 认证 (配置极简)
最佳前端搭档Hugo, Hexo, Jekyll, EleventyAstro, Next.js, Remix

⚖️ 核心维度深度对比

1. 配置方式:YAML 表单 vs TypeScript 代码

  • Sveltia CMS(古典配置): 完全继承了 Decap 的传统,使用单文件 config.yml 来定义你的后台字段。你通过编写 YAML 文本来告诉它“我需要一个标题文本框、一个日期选择器和一个图片上传组件”。

    痛点: 当你的内容结构变得极度复杂、有大量嵌套列表(List)和关联字段时,上千行的 YAML 文件会变得非常难以维护,缺少类型提示,很容易因为一个缩进写错而导致后台崩溃。

  • Keystatic(现代配置): 它的 Schema(数据结构)是完全用 TypeScript/JavaScript 编写的。你可以像写 React 组件或定义数据库模型一样,用代码去配置字段。

    爽点: 享受现代 IDE(如 VS Code)的完美自动补全和类型检查。如果字段重构、名字改了,编译器会直接报错,在大型或长期维护的项目中,DX(开发者体验)呈现降维打击。

2. 技术栈绑定:独立万能钥匙 vs JS 框架密友

  • Sveltia CMS(零依赖): 它是一个纯粹的客户端单页应用(SPA)。它不需要你的项目有任何 Node.js 编译环境。你只需要在项目的静态目录里(比如 Hugo 的 static/admin/index.html)丢进几行 HTML 和一个 JS 脚本链接(CDN 引入),它就能直接运行。它不管前端是用 Go(Hugo)、Python(Pelican)还是 Rust,它只认最终生成的 Markdown。
  • Keystatic(深度集成): 它是深度嵌入到现代 JS 生态里的。虽然它也支持单页应用模式,但它最舒服的状态是作为 Astro、Next.js 或 Remix 的一个路由组件(Route Handlers) 存在。它可以直接复用前端项目的环境变量、Tailwind 配置甚至构建管道。

3. 编辑器体验:复古实用的表单 vs 现代润滑的类 Notion

  • Sveltia CMS: 界面干净利落(比 Decap 强很多),它是典型的“左边一堆输入框,右边一块实时预览”的结构。对图库管理、多媒体上传支持很好,但写长文时的排版体验较为割裂。
  • Keystatic: 它的富文本编辑器(Rich Text Editor)体验极高,非常像 Notion。支持 / 斜杠命令,支持直接在编辑区插入你自定义的 React/Astro 组件块(Component Blocks)。例如,你可以直接在文章正文中插入一个三栏布局的“产品卡片组件”,并在后台可视化地填写卡片内容。

相关文章 / 延续阅读 →