Markdown 转 HTML
unified() // 使用 unified 统一的接口 .use(remarkParse) // 使用 Markdown 解析器插件 .use(remarkStringify) // 使用 Markdown 文本序列化插件 .processSync('# Hello, world!')
remark
remark 是unified 生态相关插件,提供 Markdown 相关的插件集合,提供了 Markdown 的解析、修改、转换为 HTML 等能力。
目前提供的一些常用插件:
- remark-parse: 提供解析 Markdown 的能力
- remark-gfm: 提供 GFM (GitHub flavored markdown) 支持
- remark-lint: 提供 Markdown 的代码检查能力
- remark-toc: 提供 Markdown 文档目录生成功能
- remark-html 提供将 Markdown 编译为 HTML 的能力
remark() // 一键初始化 Markdown 解析器 .processSync('# Hello, world!') // 同步处理文本
HTML 转 Markdown
import { unified } from 'unified' import { stream } from 'unified-stream' import rehypeParse from 'rehype-parse' import rehypeRemark from 'rehype-remark' import remarkStringify from 'remark-stringify' const processor = unified() .use(rehypeParse) // 解析 HTML .use(rehypeRemark) // 转换到 remark 体系 .use(remarkStringify) // 将语法树转换为 Markdown 字符串 process.stdin.pipe(stream(processor)).pipe(process.stdout)
原理
unified 的核心机制是基于 AST(abstract syntax trees,抽象语法树),在执行插件时 AST 会被传递给插件,可以对其进行各种处理。同时,也可以基于 AST 进行各种语言的转换,例如将 Markdown 文档解析后,转换为 HTML 进行处理,之后再转回 Markdown。