静态站点生成器有很多,Astro、Eleventy、Hugo,都很好。但这个站我选了最笨的办法:自己写一个构建脚本。
为什么不用框架
不是反对框架,是我需要的东西太少了:
- 把 Markdown 渲染成 HTML;
- 套一个布局;
- 生成 RSS 和 sitemap;
- 输出到
dist/。
这四件事加起来,一个脚本就够。用框架反而要花时间理解它的约定、追版本升级、处理插件冲突。
核心就三行
const { data, content } = matter(raw); // 读 frontmatter
const html = marked.parse(content); // Markdown → HTML
await fs.writeFile(out, layout(html)); // 套布局,写文件
gray-matter 负责解析头部元信息,marked 负责正文。两个依赖,加起来不到 1MB。
目录结构
content/
posts/ 文章,一个 .md 一篇
projects/ 作品
about.md 关于页
src/
pages.mjs 页面模板
styles/ CSS
build.mjs 构建入口
public/ 原样复制的静态资源
新增一篇文章,就是在 content/posts/ 里丢一个文件。文件名就是 URL,date 决定排序。
代价是什么
自己写构建脚本,代价是没有现成的生态。没有图片优化插件,没有 MDX,没有增量构建。
但换来的是:我知道每一行在干什么,出问题能在五分钟内定位,升级时不会有任何破坏性变更——因为它根本不会升级。
对一个个人站来说,这笔交易很划算。