关于 sveltia-cms
用于将 Sveltia CMS 集成到静态网站项目的技能,涵盖通用设置、配置、身份验证、迁移和故障排查,适合管理基于仓库的内容。
主要功能
- 01静态网站 CMS 集成指南
- 02YAML 和 TOML 配置
- 03原始文本文件编辑
- 04GitHub OAuth 设置指导
- 05配置与错误排查
适用场景
- 01为静态网站项目添加 CMS
- 02从 Decap 或 Netlify CMS 迁移
- 03编辑 JSON、YAML、CSV 或纯文本文件
- 04设置基于 GitHub 的内容编辑
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ jezweb/ claude-skills --skill sveltia-cms安装后在 Claude Code 中输入/sveltia-cms确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
README.md.claude-plugin/plugin.jsonreferences/migration-from-decap.mdscripts/check-versions.shinit-sveltia.shtemplates/11ty/config.ymlindex.htmltemplates/cloudflare-workers/setup-guide.mdtemplates/collections/blog-posts.ymldocs-pages.ymllanding-pages.ymltemplates/hugo/config.ymlindex.htmltemplates/jekyll/config.ymlindex.html详细介绍
Sveltia CMS 技能
将 Sveltia CMS 集成到静态网站项目中的完整技能。
当前版本
- @sveltia/cms:0.128.5(已于 2026 年 1 月验证)
- 状态:公开测试版(预计 2026 年初发布 v1.0)
- 成熟度:可用于生产环境(已解决前身产品遗留的 270 多个问题)
何时使用此技能
✅ 适合使用 Sveltia CMS 的情况:
- 需要基于 Git 的工作流(内容以 Markdown/YAML/TOML/JSON 格式存储在代码库中)
- 需要轻量级方案(小于 500 KB,而竞品为 1.5-2.6 MB)
- 从 Decap/Netlify CMS 迁移(可直接替换,只需修改 1 行)
- 非技术编辑者需要在不懂 Git 的情况下使用
❌ 不适合使用 Sveltia CMS 的情况:
- 需要实时协作(多位用户同时编辑)——改用 Sanity、Contentful 或 TinaCMS
- 需要可视化页面搭建(拖放式)——改用 Webflow 或 Builder.io
- 需要 React 专用的可视化编辑——改用 TinaCMS
重大变更与更新(v0.105.0+)
v0.127.0(2025 年 12 月 29 日)——弃用 slug_length
弃用:slug_length 集合选项已弃用,将在 v1.0 中移除。
迁移:
# ❌ Deprecated (pre-v0.127.0)
collections:
- name: posts
slug_length: 50
# ✅ New (v0.127.0+)
slug:
maxlength: 50
时间安排:将在 Sveltia CMS 1.0 中移除(预计于 2026 年初发布)。
v0.120.0(2025 年 11 月 24 日)——作者模板标签
新功能:隐藏组件现在支持作者模板标签:
{{author-email}}- 已登录用户的电子邮件地址{{author-login}}- 已登录用户的登录名{{author-name}}- 已登录用户的显示名称
用法:
fields:
- label: Author Email
name: author_email
widget: hidden
default: '{{author-email}}'
提交消息模板也支持 {{author-email}} 标签。
v0.119.0(2025 年 11 月 16 日)——支持 TOML 配置
新功能:配置文件现在可以使用 TOML 格式编写(此前仅支持 YAML)。
迁移:
# admin/config.toml (NEW)
[backend]
name = "github"
repo = "owner/repo"
branch = "main"
media_folder = "static/images/uploads"
public_folder = "/images/uploads"
建议:仍推荐使用 YAML,以获得更好的工具支持。
v0.118.0(2025 年 11 月 15 日)——TypeScript 重大变更
重大变更:将 SiteConfig 导出项重命名为 CmsConfig,以兼容 Netlify/Decap CMS。
迁移:
// ❌ Old (v0.117.x)
import type { SiteConfig } from '@sveltia/cms';
// ✅ New (v0.118.0+)
import type { CmsConfig } from '@sveltia/cms';
const config: CmsConfig = {
backend: { name: 'github', repo: 'owner/repo' },
collections: [/* ... */],
};
影响:仅影响 TypeScript 用户。类型导入方式发生重大变更。
v0.117.0(2025 年 11 月 14 日)——增强验证
新功能:
- 导出
CmsConfig类型,支持直接从 TypeScript 导入 - 增强对集合名称、字段类型和关系引用的配置验证
- 改进无效配置的错误消息
v0.115.0(2025 年 11 月 5 日)——字段专属媒体文件夹
新功能:支持在字段级别(而不仅限于集合级别)覆盖 media_folder。
用法:
collections:
- name: posts
label: Blog Posts
folder: content/posts
media_folder: static/images/posts # Collection-level default
fields:
- label: Featured Image
name: image
widget: image
media_folder: static/images/featured # ← Field-level override
public_folder: /images/featured
- label: Author Avatar
name: avatar
widget: image
media_folder: static/images/avatars # ← Another override
public_folder: /images/avatars
使用场景:在同一集合中为不同类型的图像指定不同的媒体文件夹。
v0.113.5(2025 年 10 月 27 日)——弃用 Logo 配置项
弃用:logo_url 选项现已弃用。请迁移至 logo.src。
迁移:
# ❌ Deprecated
logo_url: https://yourdomain.com/logo.svg
# ✅ New (v0.113.5+)
logo:
src: https://yourdomain.com/logo.svg
v0.105.0(2024 年 9 月 15 日)——安全相关重大变更
重大变更:Markdown 组件的 sanitize_preview 默认值已更改为 true(防止 XSS)。
影响:
- v0.105.0 之前:
sanitize_preview: false(兼容 Netlify/Decap CMS,但容易受到 XSS 攻击) - v0.105.0 之后:
sanitize_preview: true(默认安全)
迁移:
collections:
- name: posts
fields:
- label: Body
name: body
widget: markdown
sanitize_preview: false # ← Add ONLY if you trust all CMS users
建议:保留默认值(true),除非禁用此选项能修复预览问题,且你完全信任所有 CMS 用户。
配置选项
全局 Slug 选项(v0.128.0+)
全局配置 slug 生成行为:
slug:
encoding: unicode-normalized
clean_accents: false
sanitize_replacement: '-'
lowercase: true # Default: convert to lowercase (v0.128.0+)
maxlength: 50 # Default: unlimited (v0.127.0+)
lowercase(v0.128.0+):设为 false 可保留 slug 中的原始大小写(例如,“MyBlogPost”而非“myblogpost”)。
使用场景:大小写敏感的混合大小写 URL 或文件名。
来源:版本发布 v0.128.0,GitHub 问题 #594
文本文件的 Raw 格式(v0.126.0+)
新增的 raw 格式允许编辑没有 front matter 的文件(CSV、JSON、YAML、纯文本)。必须只有一个 body 字段,widget 类型为:code、markdown、richtext 或 text。
使用场景:
- 编辑配置文件(JSON、YAML)
- 管理 CSV 数据
- 编辑纯文本文件
配置:
collections:
- name: config
label: Configuration Files
files:
- label: Site Config
name: site_config
file: config.json
format: raw # ← NEW format type
fields:
- label: Config
name: body
widget: code
default_language: json
限制:
- 只允许一个字段(必须命名为
body) - Widget 必须为:
code、markdown、richtext或text - 不解析 front matter
数字字段的字符串编码(v0.125.0+)
数字字段新增 value_type 选项,支持 int/string 和 float/string,可将数字保存为字符串,而非 front matter 中的数字。
使用场景:某些静态网站生成器或 schema 要求将数值存储为字符串(例如,age: "25" 而不是 age: 25)。
配置:
fields:
- label: Age
name: age
widget: number
value_type: int/string # Saves as "25" not 25
- label: Price
name: price
widget: number
value_type: float/string # Saves as "19.99" not 19.99
来源:Release v0.125.0、GitHub Issue #574
通过 URL 查询参数设置编辑器面板语言(v0.126.0+)
通过 URL 查询参数 ?_locale=fr 覆盖编辑器语言,以获取特定语言的编辑链接。
使用场景:为译者或内容编辑者生成特定语言的直接编辑链接。
示例:
https://yourdomain.com/admin/#/collections/posts/entries/my-post?_locale=fr
来源:Release v0.126.0、GitHub Issue #585
Richtext 字段类型别名(v0.124.0+)
新增 richtext,作为 markdown widget 的别名,以与 Decap CMS 术语保持一致。两者功能完全相同。
配置:
fields:
- label: Body
name: body
widget: richtext # ← NEW alias for markdown
未来计划:计划为 richtext 字段类型支持 HTML 输出。
设置模式(与框架无关)
所有框架都遵循相同的模式:
-
在 public/static 文件夹中创建 admin 目录:
- Hugo:
static/admin/ - Jekyll:
admin/ - 11ty:
admin/(使用 passthrough copy) - Astro:
public/admin/ - Next.js:
public/admin/
- Hugo:
-
创建 admin/index.html:
<!doctype html> <html lang="en"> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Content Manager</title> </head> <body> <script src="https://unpkg.com/@sveltia/[email protected]/dist/sveltia-cms.js" type="module"></script> </body> </html> -
创建 admin/config.yml:
backend: name: github repo: owner/repo branch: main base_url: https://your-worker.workers.dev # OAuth proxy (required) media_folder: static/images/uploads # Framework-specific path public_folder: /images/uploads collections: - name: posts label: Blog Posts folder: content/posts create: true fields: - { label: 'Title', name: 'title', widget: 'string' } - { label: 'Date', name: 'date', widget: 'datetime' } - { label: 'Body', name: 'body', widget: 'markdown' } -
访问 admin:
http://localhost:<port>/admin/
框架特定详情:完整示例请参阅 templates/ 目录。
身份验证:Cloudflare Workers OAuth(推荐)
选择 Cloudflare Workers 的原因:速度最快,提供免费套餐,适用于任何部署平台。
步骤:
-
部署 Worker:
git clone https://github.com/sveltia/sveltia-cms-auth cd sveltia-cms-auth npm install npx wrangler deploy -
在 GitHub 上注册 OAuth 应用:
- 前往 https://github.com/settings/developers
- 点击 "New OAuth App"
- Authorization callback URL:
https://your-worker.workers.dev/callback - 保存 Client ID 和 Client Secret
-
配置 Worker 环境变量:
npx wrangler secret put GITHUB_CLIENT_ID # Paste your Client ID npx wrangler secret put GITHUB_CLIENT_SECRET # Paste your Client Secret -
更新 CMS 配置:
backend: name: github repo: owner/repo branch: main base_url: https://your-worker.workers.dev # ← Add this line -
测试身份验证:
- 打开
/admin/ - 点击 "Login with GitHub"
- 应跳转至 GitHub → 授权 → 返回 CMS
- 打开
替代方案:Vercel 无服务器函数——请参阅 templates/vercel-serverless/
常见错误与解决方案
本技能可避免设置 Sveltia CMS 时遇到的 10 个常见错误。
1. ❌ OAuth 身份验证失败
错误消息:
- "Error: Failed to authenticate"
- 重定向至
https://api.netlify.com/auth,而非 GitHub 登录页面
症状:
- 登录按钮无响应
- 身份验证弹窗立即关闭
原因:
- 后端配置中缺少
base_url - OAuth 代理 URL 不正确
- GitHub OAuth 回调 URL 错误
解决方案:
步骤 1:确认 config.yml 中有 base_url:
backend:
name: github
repo: owner/repo
branch: main
base_url: https://your-worker.workers.dev # ← Must be present
步骤 2:检查 GitHub OAuth 应用的回调地址:
- 应为:
https://your-worker.workers.dev/callback - 不应为:
https://yourdomain.com/callback
步骤 3:直接测试 Worker:
curl https://your-worker.workers.dev/health
# Should return: {"status": "ok"}
2. ❌ TOML 前置元数据错误
错误消息:
- “解析错误:无效的 TOML”
- 文件缺少
+++分隔符
症状:
- CMS 创建的新文件无法通过 Hugo 解析
- 内容出现在正文分隔符上方
原因:
- Sveltia 在测试版中的 TOML 生成存在问题
- 同一内容集合中混用了 TOML 和 YAML
解决方案:
建议使用 YAML 代替 TOML:
collections:
- name: posts
folder: content/posts
format: yaml # or md (Markdown with YAML frontmatter)
# NOT: format: toml
如果必须使用 TOML:
- CMS 保存后手动修复分隔符
- 使用 pre-commit 钩子验证 TOML
- 等待测试版修复(关注 GitHub 问题)
3. ❌ YAML 解析错误
错误消息:
- “YAML 解析错误:无效的 YAML”
- “错误:重复的键 ‘field_name’”
症状:
- CMS 无法加载现有文章
- CMS 显示空字段
原因:
- Sveltia 对 YAML 格式的要求比 Hugo/Jekyll 更严格
- 缩进错误或使用了智能引号
解决方案:
步骤 1:验证 YAML:
pip install yamllint
find content -name "*.md" -exec yamllint {} \;
步骤 2:常见修复方法:
问题:智能引号
# ❌ Bad - smart quotes from copy-paste
title: "Hello World" # Curly quotes
# ✅ Good - straight quotes
title: "Hello World" # Straight quotes
步骤 3:使用 yamlfmt 自动修复:
go install github.com/google/yamlfmt/cmd/yamlfmt@latest
find content -name "*.md" -exec yamlfmt {} \;
4. ❌ CMS 中未列出内容
错误消息:
- “未找到条目”
- “加载条目失败”
症状:
- 管理页面已加载,但未显示内容
- 文件存在于代码库中,但 CMS 无法识别
原因:
- 格式不匹配(配置要求 TOML,文件却是 YAML)
- 文件夹路径错误
解决方案:
步骤 1:验证文件夹路径:
# Config says:
collections:
- name: posts
folder: content/posts # Expects files here
# Check actual location:
ls -la content/posts # Files must exist here
步骤 2:使格式与实际文件相匹配:
# If files are: content/posts/hello.md with YAML frontmatter
collections:
- name: posts
folder: content/posts
format: yaml # or md (same as yaml for .md files)
5. ❌ “SVELTIA is not defined” 错误
错误消息:
- 控制台错误:
Uncaught ReferenceError: SVELTIA is not defined
症状:
- 管理页面显示白屏
原因:
- 缺少
type="module"属性
解决方案:
使用正确的 script 标签:
<script src="https://unpkg.com/@sveltia/cms/dist/sveltia-cms.js" type="module"></script>
<script src="https://unpkg.com/@sveltia/cms/dist/sveltia-cms.js"></script>
固定版本(推荐):
<script src="https://unpkg.com/@sveltia/[email protected]/dist/sveltia-cms.js" type="module"></script>
6. ❌ /admin 返回 404
错误消息:
- 访问
/admin/时出现“404 Not Found”
症状:
- 本地运行正常,但生产环境无法使用
原因:
- 管理目录未放在适用于该框架的正确位置
解决方案:
针对不同框架的修复方法:
Hugo:static/ 中的文件会自动复制
Jekyll:添加到 _config.yml:
include:
- admin
11ty:添加到 .eleventy.js:
module.exports = function(eleventyConfig) {
eleventyConfig.addPassthroughCopy('admin');
};
Astro:public/ 中的文件会自动复制
7. ❌ 图片无法上传(HEIC 格式)
错误消息:
- “不支持的文件格式”
症状:
- 无法上传 iPhone 拍摄的照片
原因:
- 浏览器不支持 HEIC 格式
解决方案:
在 iPhone 上:
- 设置 > 相机 > 格式 > 兼容性最佳
- 这样保存的照片将使用 JPEG 格式,而非 HEIC
或者启用图片优化:
media_libraries:
default:
config:
max_file_size: 10485760 # 10 MB
transformations:
raster_image:
format: webp # Auto-converts to WebP
quality: 85
8. ❌ 日期时间小组件的格式限制
错误消息:
- 数据静默丢失(未显示错误)
- CMS 中的日期字段显示为空白
症状:
- 编辑时,带有现有日期的文章显示为空白
- 保存后,日期会被空白值覆盖
- Hugo 将文章标记为“未来”并跳过构建
原因:
- 默认日期时间小组件输出的时间戳不带时区后缀
- 指定
format后,Sveltia 会变得严格——格式不同的现有条目将显示为空白 - 缺少时区时,Hugo 会推断为 UTC,从而导致时区问题
⚠️ 重要:格式严格性警告(v0.124.1+)
指定 format 选项后,Sveltia 会变得严格:
- 格式不同的现有条目将显示为空白
- 保存时会用空白值覆盖原值(数据会静默丢失)
- 不会显示错误消息
解决方案:
选项 1:使用 picker_utc(推荐)
fields:
- label: Date
name: date
widget: datetime
picker_utc: true # Most flexible - outputs with timezone
选项 2:指定带时区的格式(有风险——请参阅上方警告)
fields:
- label: Date
name: date
widget: datetime
format: "YYYY-MM-DDTHH:mm:ss.SSSZ" # Only if ALL existing dates match this format
选项 3:配置 Hugo,使其接受缺少时区的日期
# config.toml
[frontmatter]
date = [":default", ":fileModTime"]
预防措施:
- 如果日期格式混杂,请勿指定
format - 添加
format前,先统一所有日期的格式 - 改用
picker_utc: true(更灵活)
来源:GitHub Issue #565,已在 v0.126.0 中修复(改进了日期解析器,但格式严格性仍然存在)
9. ❌ GDPR 违规:Google Fonts CDN
错误消息:
- 未显示错误(隐私合规问题)
症状:
- 注重隐私的网站无法使用 Sveltia
- 欧盟公共部门无法采用
- 不符合 GDPR
原因:
- Sveltia 未经用户同意,便从 Google CDN 加载 Google Fonts 和 Material Symbols
- Google 会跟踪字体使用情况并收集 IP 地址
- 违反欧盟数据保护法
⚠️ 影响:阻碍欧盟公共部门和注重隐私的网站使用
解决方案(Vite 插件——推荐):
// vite.config.ts
import { defineConfig, type Plugin } from 'vite'
function ensureGDPRCompliantFonts(): Plugin {
const fontsURLRegex = /fonts\.googleapis\.com\/css2/g
const replacement = 'fonts.bunny.net/css'
return {
name: 'gdpr-compliant-fonts',
enforce: 'post',
transform(code) {
if (fontsURLRegex.test(code)) {
return code.replaceAll(fontsURLRegex, replacement)
}
},
}
}
export default defineConfig({
plugins: [ensureGDPRCompliantFonts()],
})
替代方案:
选项 2:Bunny Fonts(Google Fonts 的 1:1 替代品)
- 使用 https://fonts.bunny.net 替代 fonts.googleapis.com
- 位于欧盟,符合 GDPR
- API 与 Google Fonts 相同
选项 3:自托管字体
- 使用
@fontsourcenpm 包 - 将字体与应用程序打包
- 不会发出外部请求
维护者回应:
- 已确认问题
- 计划添加系统字体选项(v1.0 发布后)
- Sveltia 本身不会收集数据(唯一的问题是字体)
10. ❌ CORS / COOP 策略错误
错误消息:
- “Authentication Aborted”
- “Cross-Origin-Opener-Policy blocked”
症状:
- OAuth 弹出窗口打开后立即关闭
原因:
- 严格的
Cross-Origin-Opener-Policy标头阻止了 OAuth
解决方案:
Cloudflare Pages(_headers 文件):
/*
Cross-Origin-Opener-Policy: same-origin-allow-popups
# NOT: same-origin (this breaks OAuth)
Netlify(_headers 文件):
/*
Cross-Origin-Opener-Policy: same-origin-allow-popups
Vercel(vercel.json):
{
"headers": [
{
"source": "/(.*)",
"headers": [
{
"key": "Cross-Origin-Opener-Policy",
"value": "same-origin-allow-popups"
}
]
}
]
}
已修复的问题(历史参考)
这些问题存在于早期版本中,但已修复。此处记录供参考。
✅ 包含括号的路径会导致条目加载失败(已在 v0.128.1 中修复)
问题:当 path 选项包含括号 () 时,Sveltia CMS 无法加载现有条目。这会影响使用 app/(content)/(writing)/ 等路由组的 Next.js/Nextra 用户。
症状(v0.128.1 之前):
- 可以创建新条目
- 加载/列出已有条目时会无提示地失败
- 即使文件存在,CMS 仍显示“No entries found”
失败示例:
collections:
- name: pages
folder: app/(pages)
path: "{{slug}}/page" # ← Failed to load existing entries
extension: mdx
状态:已在 v0.128.1 中修复(2026 年 1 月 13 日)
✅ 根目录集合会导致 GitHub 后端失效(已在 v0.125.0 中修复)
问题:通过 GitHub 后端创建新条目时,设置了 folder: ""、folder: "." 或 folder: "/" 的集合会失败。GraphQL 查询错误地构造了以 / 开头的路径(绝对路径),而不是相对路径。
症状(v0.125.0 之前):
- 通过浏览器 File API 在本地运行正常
- 使用 GitHub 后端时失败(GraphQL 错误)
- 前导斜杠导致 GraphQL mutation 失败
失败示例:
collections:
- name: root-pages
folder: "" # or "." or "/"
# ← Broke when creating entries via GitHub backend
使用场景:VitePress 和其他将内容存储在仓库根目录的框架。
状态:已在 v0.125.0 中修复(2025 年 12 月 20 日)
从 Decap CMS 迁移
Sveltia CMS 是 Decap CMS 的即插即用替代品。
步骤 1:更新 script 标签(只需更改 1 行):
<script src="https://unpkg.com/decap-cms@^3.0.0/dist/decap-cms.js"></script>
<script src="https://unpkg.com/@sveltia/[email protected]/dist/sveltia-cms.js" type="module"></script>
步骤 2:保留现有的 config.yml(无需更改)
步骤 3:在本地测试(验证登录、内容列表、编辑和保存)
就这么简单! 您的内容、集合和工作流都保持不变。
不支持:
- Git Gateway 后端(出于性能原因)
- Azure 后端(之后可能添加)
变通方案:改用 Cloudflare Workers 或 Vercel OAuth 代理。
打包资源
模板
- hugo/ - 完整的 Hugo 博客配置
- jekyll/ - Jekyll 网站配置
- 11ty/ - Eleventy 博客配置
- astro/ - Astro 内容集合
- cloudflare-workers/ - OAuth 代理实现
- vercel-serverless/ - Vercel 身份验证函数
- collections/ - 预构建的集合模式
参考资料
- common-errors.md - 扩展错误排查指南
- migration-from-decap.md - 完整迁移指南
- cloudflare-auth-setup.md - OAuth 分步设置指南
- config-reference.md - 完整的 config.yml 文档
脚本
- init-sveltia.sh - 新项目自动化设置
- deploy-cf-auth.sh - 部署 Cloudflare Workers OAuth
官方文档
- 文档网站:https://sveltiacms.app/en/docs(正在积极开发中,部分章节可能尚未完善)
- GitHub:https://github.com/sveltia/sveltia-cms
- OAuth Worker:https://github.com/sveltia/sveltia-cms-auth
- npm Package:https://www.npmjs.com/package/@sveltia/cms
- 讨论区:https://github.com/sveltia/sveltia-cms/discussions
注意:官方文档网站正在积极开发中。对于部分主题,GitHub README 仍是实用的备用资料。
Token 效率
预计节省:65-70%(约节省 6,300 个 Token)
不使用 Skill(约 9,500 个 Token):
- 框架设置试错:2,500 个 Token
- OAuth 配置尝试:2,500 个 Token
- 错误排查:2,500 个 Token
- 部署配置:2,000 个 Token
使用 Skill(约 3,200 个 Token):
- 加载 Skill(SKILL.md):2,000 个 Token
- 选择模板:400 个 Token
- 项目特定调整:800 个 Token
可预防的错误
此 Skill 可预防 10 种常见错误(预防率 100%):
- ✅ OAuth 身份验证失败
- ✅ TOML front matter 生成错误
- ✅ YAML 解析错误(严格验证)
- ✅ 内容未在 CMS 中列出
- ✅ “SVELTIA is not defined”错误
- ✅ /admin 页面出现 404
- ✅ 图片上传失败(HEIC 格式)
- ✅ Datetime 小部件格式严格性/时区问题
- ✅ 违反 GDPR(Google Fonts CDN)
- ✅ CORS/COOP 策略错误
最后更新:2026-01-21 Skill 版本:2.1.0 Sveltia CMS 版本:0.128.5(Beta) 状态:已可用于生产环境,预计 2026 年初发布 v1.0 GA 变更:新增 6 个配置选项(slug 小写、raw 格式、数字字符串编码、locale URL 参数、richtext 别名、支持 Gemini 2.5 Flash-Lite),更新 datetime 错误并加入格式严格性警告,新增 GDPR Google Fonts 解决方法,记录 2 个已修复的历史问题,将 slug_length 选项标记为弃用