Skip to main content
不稳定的 API — 此 API 正在积极开发中,可能在未来的 Bun 版本中发生变化。
Bun 包含一个用 Rust 编写的快速内置 Markdown 解析器。它支持 GitHub Flavored 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 Server Components:

组件覆盖

通过在第二个参数中按键名传递自定义 React 组件来替换任何 HTML 元素:

可用覆盖

解析器生成的每个 HTML 标签都可以覆盖:

React 18 及更早版本

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

解析器选项

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