为什么我选择 Astro 搭建个人博客

对比了 Next.js、Hugo、Gatsby 等多个方案后,最终选择了 Astro。本文记录我的决策过程和 Astro 的核心优势。


在搭建这个博客之前,我花了几天时间对比各种静态站点生成器(SSG)。最终选择 Astro 并不是一时兴起,而是经过一番权衡后的决定。

候选方案对比

方案 优点 缺点
Next.js 生态强大,SSR/SSG 都支持 对个人博客来说太重,JavaScript bundle 偏大
Hugo 构建速度极快,Go 编写 模板语法(Go templates)不够灵活
Gatsby 插件生态丰富 构建慢,React 依赖重
Astro 零 JS 输出、Markdown 一流、学习曲线低 SSR 场景不如 Next.js 成熟(但博客不需要)

Astro 打动我的几点

1. 默认零 JavaScript

Astro 默认生成纯 HTML,不向客户端发送任何 JavaScript。对于一个以文字为主的博客来说,这正是我想要的——快,极快

2. 组件可以混用

虽然这个博客目前只用 Astro 原生组件,但 Astro 支持在同一项目中混用 React、Vue、Svelte 组件。如果以后需要交互式内容(比如嵌入一个图表),我可以按需引入。

3. Markdown + Content Collections

Astro 的 Content Collections 提供了类型安全的 frontmatter 校验。写错字段名?构建时直接报错,而不是等到页面渲染才发现。

// src/content.config.ts
const blog = defineCollection({
  loader: glob({ base: './src/content/blog', pattern: '**/*.md' }),
  schema: ({ image }) => z.object({
    title: z.string(),
    pubDate: z.coerce.date(),
  }),
});

小结

如果你也想搭建一个以内容为主、追求速度、不想折腾运维的个人博客,Astro 是目前最好的选择。没有之一。