Daifresne Blog

零依赖静态博客:一个 build.js 搞定

·约 2 分钟 ·折腾Node前端

想写博客,又不想为了写几篇文章装一整条工具链。于是用 Node 内置模块写了个构建脚本:读 markdown、套模板、输出静态文件,就这三件事。

它做四件事

  1. 扫描 posts/*.md,解析开头的 front matter(标题、日期、标签)
  2. 把 markdown 转成 HTML —— 自己写的小解析器,够用就行
  3. 套进 template.html,生成首页、文章页、标签页和 RSS
  4. 把 assets/ 原样拷进输出目录

为什么不用现成的

方案好处代价
Hexo主题多、插件全、中文资料最多几百 MB 依赖,改主题得学 EJS 模板
Hugo构建极快、单个二进制无依赖模板是 Go template 语法,改起来陡
自己写每行都看得懂,想怎么改怎么改功能得自己加,比如搜索、分页

用现成的完全不丢人,自己写纯粹是因为好玩。

核心其实就一个函数

function renderMarkdown(src) {
  // 逐个块处理:代码块 → 标题 → 引用 → 表格 → 列表 → 段落
  // 行内再处理:行内代码 → 图片 → 链接 → 粗体 → 斜体
}

真正花时间的是边界情况:行内代码里的 ** 不能被当成粗体、列表嵌套要靠缩进判断、表格的 : 决定对齐方向。

写文章是什么体验

往 posts/ 丢一个 .md,跑一下构建,完事。文件名前面的日期决定排序:

posts/
├─ 2026-09-12-hello.md
├─ 2026-09-05-零依赖静态博客.md
└─ 2026-08-18-项目记录模板.md

图片就放在 assets/ 里,正文里这样引用:![接线图](assets/wiring.png)。