用 Astro 7 重铸星舰博客

为什么是 Astro

在试过多个方案后,我最终选择了 Astro 7:默认零 JS、内容集合原生支持 Markdown、构建产物是纯静态文件,完美契合 Cloudflare Pages。

内容即数据

所有文章以 Markdown 存放在 src/content 下,由 src/content.config.ts 中的 glob loader 自动收集,并用 zod 做类型校验。

const blog = defineCollection({
  loader: glob({ pattern: '**/[^_]*.md', base: './src/content/blog' }),
  schema: z.object({ title: z.string(), pubDate: z.coerce.date() }),
});

部署

只需一条命令:

npm run build   # 输出到 dist/

然后在 Cloudflare Pages 选择 dist 作为构建目录即可。

内容存于 Git,可版本化、可迁移,是长期主义的写法。