838 字
4 分钟
【教程】从DecapCMS迁移到SveltiaCMS

封面图:https://www.pixiv.net/artworks/113004958

前言:#

如Sveltia CMS简介里说的一样,Decap CMS大抵已经死了。难看的UI、缺少的功能、奇怪的Bug、无用的文档、聊胜于无的更新,看起来没有必要再待在这条千疮百孔的船上了。

幸运的是Sveltia很好的兼容了Decap,所以几乎不需要修改之前的Decap配置内容,而且也不是非要用Sveltia的OAuth 客户端,这都大幅度降低了我们从Decap迁移的难度。

简单配置下文件#

【笔记】基于Edgeone Pages部署Fuwari(Astro)博客+DecapCMS前文我们准备了src/pages/admin.html这个Decap专用的admin页面,现在不需要了,就把它删掉。

我们重新在/public/admin/新建一个index.html

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <meta name="robots" content="noindex" />
    <title>Sveltia CMS</title>
</head>
<body>
    <script src="https://fastly.jsdelivr.net/npm/@sveltia/cms/dist/sveltia-cms.js"></script>
</body>
</html>

Sveltia的config.yml配置文件如下

logo_url: Sveltia的logo位置
media_folder: "/src/content/posts/images" # 文件将被存储在仓库中的位置
collections:
- name: "terminal" # 用于路由,例如,/admin/collections/blog
    label: "paper" # 在 UI 中使用
    folder: "src/content/posts" # 存储文档的文件夹路径
    create: true # 允许用户在此集合中创建新文档
    fields: # 每个文档的字段,通常在 front matter 中
- { label: "标题", name: "title", widget: "string" }
- { label: "发布日期", name: "published", widget: "datetime", type: "date" }
- { label: "描述", name: "description", widget: "text", required: false }
- { label: "封面图片", name: "image", widget: "image", default: "https://rdimg.yumehinata.com/random-wallpaper"}
- { label: "标签", name: "tags", widget: "list", required: false }
- { label: "分类", name: "category", widget: "string", required: false }
- { label: "草稿状态", name: "draft", widget: "boolean", default: false }
- { label: "正文", name: "body", widget: "richtext" }
    media_folder: "/src/content/posts/images/{{slug}}"
    public_folder: "./images/{{slug}}" # 上传媒体文件的 src 属性
i18n:
  structure: multiple_folders
  locales: ["zh-cn", "en"]
  default_locale: "zh-cn"
backend:
  name: github
  repo: "用户/仓库"
  branch: "main"
  api_root: "https://api.github.com"
  site_domain: "https://博客域名"
  base_url: "https://OAuth客户端域名"
  auth_endpoint: "auth"

这里就要说Sveltia的优势了。之前的Decap教程提到过,Fuwari的特殊功能导致了我们在编辑器中必须写./images这样的相对路径,但是public_folder是不允许写这种相对路径的(Sveltia的全局里也是不允许写的),但是collections:下的属性就不要紧了。所以我们现在全局里写一个media_folder,再在collections中补上public_foldermedia_folder当然实际需求请按自己的来

而且这还顺带解决了我们替换编辑器的需求,这样【笔记】Fuwari主题下的DecapCMS编辑器替换也没有用了,Sveltia的编辑器可比Decap好用和美观多了。

另外,我们之前的教程被html文件中加载的yml文件的格式搞得头疼,现在Sveltia就不用担心这种奇怪的问题了(不知道比Decap高到哪里去了)。

下面的第三方 OAuth 客户端相关配置,还是可以参考之前的笔记内容。使用Edgeone Pages的大家还是可以用幻梦之前做好的客户端

YumeHinata
/
dacap-cms-edgeone-pages
Waiting for api.github.com...
00K
0K
0K
Waiting...

展示:#

这篇新的文章就是在新的SveltiaCMS完成的编辑,体验非常良好。

文章编辑页

登录页面

文章页,通过日期排序

媒体文件页

黑夜模式与小语种支持,但是目前只支持英语与日语

快捷键

比Decap美观太多了

【教程】从DecapCMS迁移到SveltiaCMS
https://www.yumehinata.com/posts/教程从decapcms迁移到sveltiacms/
作者
YumeHinata
发布于
2026-07-10
许可协议
CC BY-NC-SA 4.0