Engineering

从零构建一个极简的静态博客生成器

这个博客用的是一个自己写的生成器,叫 kamid。写它的起因是想把博客从某个平台搬走,需求很简单:把 Markdown 文件转成 HTML,配一个简单的模板,然后就没了。

写代码和拍照一样,极简的工具反而更难做,因为你要有足够的理由拒绝每一个功能。第一个版本用了三天,功能完整但代码乱得我无法接受。删掉重写,这次刻意慢下来,先想清楚数据结构,再动手。

核心只有一个 Site 结构,包含 posts 列表和配置。Post 也很简单:titledatecontent(原始 markdown),以及 html(渲染后)。渲染过程是:读取 markdown → 解析 frontmatter → 用 goldmark 转成 HTML → 套模板。goldmark 是 Go 社区最常见的 markdown 解析库,扩展性不错。

模板用 Go 的 html/template,功能受限但够用。每个页面有共用的 layout,里面嵌套 headerfootercontent。我花了最多时间的是让页面之间保持一致——同一个样式、同一个字体、同一套间距。

发布流程最后变成一个 Makefile:make build 生成静态文件,make deploy 同步到服务器。两行命令,干净利落。部署用 rsync 同步到 VPS,没有数据库,没有后台,就一个静态站点。

花了大约一周业余时间,代码量不到一千行。现在每次写完文章,运行一个命令,文章就上线了。这大概是我这两年最满意的一个 side project。

如果要找这个项目的代码,在 GitHub 上搜 kamid 就能找到。许可证是 MIT,有兴趣可以自己架一个。