用 Astro 从零搭建个人博客
为什么是 Astro
我想要的是纯静态、零运行时、好维护。Astro 的群岛架构让文章页默认零 JS,首屏快,且内容集合(Content Collections)自带类型校验,正好契合「不手写 Markdown 也要结构正确」的目标。
内容集合即契约
src/content.config.ts 把每篇文章的 frontmatter 变成 Zod schema:缺字段、字段类型错,构建期就报错,而不是上线后才发现。
const blog = defineCollection({
loader: glob({ pattern: '**/*.{md,mdx}', base: './src/content/blog' }),
schema: z.object({
title: z.string(),
category: z.string(),
tags: z.array(z.string()).default([]),
// ...
}),
});
把写作交给 Pages CMS
我不打算日常手写 Markdown。Pages CMS 读仓库里的 .pages.yml,提供一个浏览器后台,保存即提交到 GitHub,再触发 Actions 自动部署。这样写文章和「写代码」彻底解耦。
- 新建文章 → 填表单 → 上传封面 → 保存;
- 后台提交 →
main分支更新 → 自动构建部署。
进度
- 主题与暗色模式
- 文章 / 分类 / 标签 / 搜索
- Giscus 评论
- 归档页与年度统计(待做)
下一步补一个归档时间线。欢迎在留言板催更。
评论
评论系统待配置:请部署 Waline 服务并填写 walineServerURL。
详情见 README「Waline 配置步骤」。