Essay

用 Astro 6 组织内容层,而不是只组织页面

当博客准备长期维护时,真正需要抽象的通常不是组件,而是内容来源和内容结构。

很多人做博客时,第一反应是先把首页和文章页画出来。但一旦内容开始变多,问题往往不是“页面不好看”,而是“文章从哪里来,怎么被组织”。

先定义内容,再定义视图

如果一篇文章最基本的信息是标题、摘要、发布日期、标签和封面图,那么这些字段就应该先被定义为 schema,而不是散落在模板判断里。

这样做最直接的好处是:

  • 写作时更稳定
  • 构建时有校验
  • 未来接入 CMS 时能保持同一套输出格式

把本地内容源和未来 CMS 放在同一层抽象

Astro 6 的优势不只是静态输出,它还给后续的 Live Content Collections 留出了自然的升级路径。

export interface ContentSource {
  getAllPosts(): Promise<PostPreview[]>;
  getPostBySlug(slug: string): Promise<Post | undefined>;
  getAllTags(): Promise<TagSummary[]>;
}

当页面只依赖这个接口时,本地 MDX 和远端 CMS 的区别就只剩下适配器实现,而不是整站重构。

写作工作流也属于架构的一部分

架构不只是给程序员看的。一个好的博客架构,会让作者每次写作都更轻松:文件放哪、字段填什么、标签怎么命名、是否允许草稿,这些都应该在一开始被照顾到。

如果这些约束足够清晰,内容增长反而会更自然。