← 所学

用 Astro 内容集合搭起「此间」

此间用 Astro 搭建。选它的理由很简单:内容站,纯静态,写 Markdown 就能发布,没有多余的运行时。

内容集合(Content Collections)

文章不放 src/pages/ 里硬排,而是交给内容集合管理。src/content.config.ts 里定义两套集合:notes(所学)和 life(生活),各自声明 frontmatter 的结构:

const notes = defineCollection({
  loader: glob({ pattern: '**/*.md', base: './src/content/notes' }),
  schema: z.object({
    title: z.string(),
    date: z.coerce.date(),
    tags: z.array(z.string()).default([]),
    draft: z.boolean().default(false),
  }),
});

好处是 frontmatter 写错时构建直接报错,比”上线了才发现日期格式不对”体面得多。

一些小设计

  • 按年归档:列表页把 getCollection 的结果按 getFullYear() 分组,旧文自然沉底;
  • 节气标注:文章页日期旁带一个节气,用一张近似日期速查表实现,误差 ±1 天,只作雅致标注用;
  • RSS:@astrojs/rss 一页搞定,输出到 /rss.xml。

构建产物是纯 HTML + 一点 CSS,Lighthouse 全绿。足够了。