Skip to main content
不稳定的 API — 该 API 正在积极开发中,未来版本的 Bun 可能会发生变化。
Bun 内置了一个使用 Rust 编写的快速 Markdown 解析器。它支持 GitHub 风格 Markdown(GFM)扩展,并提供三个 API:
  • Bun.markdown.html() — 将 Markdown 渲染为 HTML 字符串
  • Bun.markdown.render() — 使用自定义回调渲染 Markdown 的每个元素
  • Bun.markdown.react() — 将 Markdown 渲染为 React JSX 元素

Bun.markdown.html()

将 Markdown 字符串转换为 HTML。
默认启用 GFM 扩展,如表格、删除线和任务列表:

选项

作为第二个参数传入选项对象以配置解析器:
所有可用选项:

自动链接

传入 true 可启用所有自动链接类型,或者传入对象以精细控制:

标题 ID

传入 true 可同时启用标题 ID 和自动链接标题,或者传入对象进行细粒度控制:

Bun.markdown.render()

解析 Markdown 并使用自定义 JavaScript 回调渲染。这样可以完全控制输出格式——你可以生成带自定义类的 HTML、React 元素、ANSI 终端输出或任何其他字符串格式。

回调函数签名

每个回调接收:
  1. children — 元素累积的内容字符串
  2. meta(可选)— 带有元素特定元数据的对象
返回一个字符串替代元素渲染。返回 nullundefined 则完全忽略该元素。如果未注册元素回调,则其子元素会原样通过。

块级回调

列表项元数据

listItem 回调会接收渲染标记所需的所有信息:
  • index — 在父列表中的基于 0 的位置
  • depth — 父列表的嵌套层级(0 = 顶层)
  • ordered — 父列表是否为有序列表
  • start — 父列表的起始编号(仅当 ordered 为 true 时)
  • checked — 任务列表状态(仅用于 - [x] / - [ ] 项)

行内回调

示例

带类的自定义 HTML

去除所有格式

忽略元素

返回 nullundefined 可从输出中删除某元素:

ANSI 终端输出

嵌套列表编号

listItem回调函数接收渲染标记所需的所有内容——无需后期处理:

代码块语法高亮

解析器选项

将解析器选项作为单独的第三个参数传入:

Bun.markdown.react()

将 Markdown 直接渲染为 React 元素。返回一个 <Fragment>,可以作为组件返回值使用。

服务端渲染

支持 renderToString() 和 React 服务端组件:

组件替代

通过第二个参数传入以标签名为键的自定义 React 组件,替换任意 HTML 元素:

可覆盖元素列表

解析器产生的每个 HTML 标签都可以被替换:

React 18 及更早版本

默认情况下,元素使用 Symbol.for('react.transitional.element') 作为 $$typeof 符号。对于 React 18 及更早版本,在选项(第三参数)中传入 reactVersion: 18

解析器选项

将任意解析器选项作为第三个参数传入: