iflux-next 项目中 blog 和 docs 两个站点的 Frontmatter 字段定义、_meta.json 侧边栏配置和 Zod 校验规则。
iflux-next 项目包含两个内容站点:blog(技术博客)和 docs(文档中心)。它们共享底层 Frontmatter 解析引擎 @iflux/utils,但字段定义略有差异。
Frontmatter 是 MDX 文件顶部的 YAML 元数据区域,用 --- 包裹:
内容文件位于各自的 src/content/ 下,通过 gray-matter 解析后经 Zod Schema 校验。
文章统一放在 apps/blog/src/content/posts/ 下,文件名即 slug:
访问路径 /posts/<slug>,支持多级目录(如 /posts/wsl2/arch)。
PostFrontmatterSchema 的完整定义:
文章标题,显示在详情页、列表卡片和浏览器标签。必填,空值时 Zod 校验失败,该文章会被跳过。
控制文章排序(新在前)。推荐加引号避免 YAML 解析为 Date 对象:
唯一描述字段,同时用于 SEO <meta> 和文章列表卡片摘要。建议 150 字符以内:
之前独立的 excerpt 字段已移除,统一使用 description。
文章分类,用于侧边栏筛选和归组:
标签数组,两种写法等价:
标签内的空格会自动转为连字符(如 AI Agent → AI-Agent)。
封面图片 URL,显示在列表卡片和文章详情页顶部。
草稿标记,true 时文章默认不出现列表页。本地预览可用 getAllPosts({ includeDrafts: true }) 查看。
系列归组和排序,同一系列的文章会在详情页底部显示上下篇导航:
最后修改日期,用于文章页显示「最后更新于」信息。优先度高于 git commit date:
Docs 按目录树组织,侧边栏由 _meta.json 控制:
每个目录下的 _meta.json 控制侧边栏项的顺序和显示名称:
标题优先级:frontmatter title > _meta.json > 文件名。
DocsFrontmatterSchema 的完整定义:
校验失败时文章会被跳过(blog 的 getAllPosts 和 docs 的 scanDocs 均有 try-catch)。所以 title 必须填写。
草稿标记,true 时默认隐藏 |
series | string | — | 所属系列名称 |
seriesOrder | number | — | 系列内排序序号 |
updated | string | — | 最后更新日期 YYYY-MM-DD |
YYYY-MM-DD