remarkjs 是一个将 markdown 转换为语法树进而转换为 html 的工具,它遵循 CommonMark 的标准,是最小集,比如很常用的表格格式就不在里面。
GFM(GitHub Flavored Markdown),是 GitHub 在 Markdown 基础上扩展的一些新格式,它包含了删除线、任务列表、表格、自动链接等等。
所以出现了一个 remark-gfm 的插件来实现这些格式,它几乎是使用 remarkjs 时的必装插件。
然而实际使用中,我发现 GFM 中的「自动链接」不是一个好的逻辑,它会把一切疑似链接的纯文本都解析为 link,在链接与中英文标点符号混用时,解析错乱的概率非常大。
第一时间想到的就是只禁用「自动链接」功能,这时我才发现,remark-gfm 这个插件,并没有提供这种配置项,即要么都启用,要么就别用。
于是火速赶往它的开源仓库,打算提交代码成为 contributor,翻了 issue 后发现,有人提过这个问题,但维护者的态度是:不做,也不接收 PR,建议想做的自己 fork。理由是希望统一而不要有差异化。
心凉了,道理我都懂,但是测试真的会给我提 bug。
尝试自己封装插件,只把自己需要的格式引入,由于 remarkjs 拆分的粒度比较细,从一个包依赖变成了 7 个包依赖,锁死版本。业务项目实在不适合这样搞。
题外话,remarkjs 早早地就拥抱了 esm only,而且跨大版本升级时,搞出了类似 eslint 那种级别的破坏性变更,属实是让我痛苦了很久。
我都开始后悔,当初为什么不选择 markdown-it 呢?
人家是真自由,想怎么配怎么配。