搜索博客与维基

技术/框架

Astro

一个把内容优先做到底的静态站点框架,构建时把 Markdown 变成纯 HTML。

1 分钟阅读别名:astro、Astro框架

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 检查整站

什么时候不该选它

需要登录、需要实时写数据库、需要服务端根据每个用户生成不同页面的场景,静态框架不占优势。博客和维基这类「内容对所有人一样」的站点才是主场。