本文目录

静态博客的文章在构建时生成。为了让列表、详情页和订阅中的内容一致,每个入口都需要使用同一条发布规则:文章不是草稿,而且发布日期已经到达。

将发布条件集中管理

文章列表隐藏草稿还不够。如果详情页仍然生成,知道地址的人依然可以打开;RSS 或站点地图也可能把链接分发出去。

这个博客把判断集中在内容查询层。生产页面与内容分发都使用已发布文章,本地开发另外提供包含草稿和未来文章的预览查询。

const published = !post.data.draft && post.data.date <= now;

这条判断的重点是所有入口保持一致。增加搜索索引、归档或相关文章时,也应该复用同一份已发布文章集合。

日期需要明确时区

日期字符串 2026-10-04 没有描述具体时刻。这个博客约定它代表上海时间当天零点,精确预约则使用带时区的 ISO 格式。

元信息 用途 维护方式
date 首次发布日期与预约时刻 发布后通常保持不变
updatedAt 最近一次实质更新 正文修改后手动填写
draft 是否仍在编辑 完成内容后改为 false
slug 公开链接 创建后保持稳定

更新时间不等于构建时间。重新部署样式,并不意味着每一篇文章都更新过。

静态文件不会自行发布

未来文章在构建时被排除,到达日期后,已经生成的文件不会自动改变。需要另一次构建,才能生成文章页面并更新 RSS。

仓库中的定时工作流检查已到期但尚未出现在正式 RSS 中的文章,再通过部署钩子请求重建。它依赖部署钩子配置和 GitHub 调度,适合允许一定延迟的个人博客更新,不提供秒级发布保证。

用输出验证规则

验证时可以准备一篇正常文章、一篇草稿和一篇未来文章,检查以下结果:

  • 生产输出只包含正常文章。
  • 草稿与未来文章不出现在列表、相关文章、RSS 和站点地图中。
  • 本地开发能够打开两类预览,并显示提示。
  • 发布时刻恰好到达时,文章应被包含。

这些检查关注读者最终得到的页面和订阅内容。内容模型校验通过之后,仍然需要验证构建结果。

参考资料

具体写作命令见 Markdown 工作流。