本文目录
静态博客的文章在构建时生成。为了让列表、详情页和订阅中的内容一致,每个入口都需要使用同一条发布规则:文章不是草稿,而且发布日期已经到达。
将发布条件集中管理
文章列表隐藏草稿还不够。如果详情页仍然生成,知道地址的人依然可以打开;RSS 或站点地图也可能把链接分发出去。
这个博客把判断集中在内容查询层。生产页面与内容分发都使用已发布文章,本地开发另外提供包含草稿和未来文章的预览查询。
const published = !post.data.draft && post.data.date <= now;
这条判断的重点是所有入口保持一致。增加搜索索引、归档或相关文章时,也应该复用同一份已发布文章集合。
日期需要明确时区
日期字符串 2026-10-04 没有描述具体时刻。这个博客约定它代表上海时间当天零点,精确预约则使用带时区的 ISO 格式。
| 元信息 | 用途 | 维护方式 |
|---|---|---|
| date | 首次发布日期与预约时刻 | 发布后通常保持不变 |
| updatedAt | 最近一次实质更新 | 正文修改后手动填写 |
| draft | 是否仍在编辑 | 完成内容后改为 false |
| slug | 公开链接 | 创建后保持稳定 |
更新时间不等于构建时间。重新部署样式,并不意味着每一篇文章都更新过。
静态文件不会自行发布
未来文章在构建时被排除,到达日期后,已经生成的文件不会自动改变。需要另一次构建,才能生成文章页面并更新 RSS。
仓库中的定时工作流检查已到期但尚未出现在正式 RSS 中的文章,再通过部署钩子请求重建。它依赖部署钩子配置和 GitHub 调度,适合允许一定延迟的个人博客更新,不提供秒级发布保证。
用输出验证规则
验证时可以准备一篇正常文章、一篇草稿和一篇未来文章,检查以下结果:
- 生产输出只包含正常文章。
- 草稿与未来文章不出现在列表、相关文章、RSS 和站点地图中。
- 本地开发能够打开两类预览,并显示提示。
- 发布时刻恰好到达时,文章应被包含。
这些检查关注读者最终得到的页面和订阅内容。内容模型校验通过之后,仍然需要验证构建结果。
参考资料
具体写作命令见 Markdown 工作流。