分工
- remark 处理 markdown 语法树
- rehype 处理 HTML 语法树
- remark-rehype 负责在两个世界之间搭桥
最小可用管线只有四步:
const html = await unified()
.use(remarkParse)
.use(remarkRehype)
.use(rehypeStringify)
.process(markdown);
为什么不用现成的一体化方案
一体化方案上手更快,但扩展点少。当你想给标题加锚点、给代码块加高亮时,还是得回到管线里加插件。
排版比转换更重要
转换只是一行代码,真正决定阅读体验的是 CSS:正文宽度控制在 680 到 720 像素,行高 1.75,中文每行 30 到 40 个字最舒服。
引用块用左侧强调色竖线,代码块用第二个层级的背景色加圆角——这些规则都应该写进品牌契约,而不是散落在各个组件里。
安全提醒
如果内容来自用户而不是你自己写的仓库,必须在管线里加消毒插件。当前内容全部由仓库维护,风险可控,但换来源之前一定要补上。