Astro 是一个静态站点构建工具。核心特点是在构建阶段把页面渲染成纯 HTML,默认不给浏览器发任何 JavaScript。
它解决什么问题
传统前端框架的思路是「在浏览器里画出页面」。页面越大,发到浏览器的脚本越多,首屏越慢。Astro 反过来:页面在构建时就画好了,浏览器拿到的是一份已经画完的 HTML,直接显示。
需要交互的部分(搜索框、主题切换、图表)单独用一小段脚本处理,叫「岛屿」(islands)。岛是孤立的,互不干扰,不用的页面就一个字节都不加载。
内容从哪来
Astro 把内容当成一等公民。有两种来源:
- 内容集合:约定目录下的 Markdown 文件,字段有 schema 校验。
- 数据获取:构建时调 API 或读本地文件,把结果塞进页面。
对写博客来说,第一种是主力。见内容集合。
这个站用到的能力
| 需求 | Astro 里的对应物 |
|---|---|
| 写文章 | src/content/blog/**/*.md |
| 写词条 | src/content/wiki/**/*.md |
| 多级分类页 | 动态路由 [...path].astro |
| 分页 | paginate() |
| 代码高亮 | 内置 Shiki |
| 公式 | 接 KaTeX 插件 |
| 全文搜索 | 构建后跑 Pagefind |
常用命令
npm run dev # 本地开发,改文件自动刷新
npm run build # 构建静态产物到 dist/
npm run preview # 本地预览构建产物
npm run check # 用 TypeScript 检查整站
什么时候不该选它
需要登录、需要实时写数据库、需要服务端根据每个用户生成不同页面的场景,静态框架不占优势。博客和维基这类「内容对所有人一样」的站点才是主场。