本文解释了如何扩展 MDX 内容,具体来说,如何使用插件转换内容。请参阅 § 使用 MDX 了解如何传递组件、props 和布局。请参阅 § 入门指南 了解如何将 MDX 集成到您的项目中。

组件与插件

在使用 @mdx-js/mdx 或其集成之一时,有三个扩展点:

大多数情况下,这些组件和插件与 MDX 并不直接关联。例如,如果您使用 React,则可以在 MDX 中使用 ReactConfetti。或者,您可以使用插件 remark-gfm 来在 MDX 中启用 GFM 功能。有时,我们需要特定的组件或插件来与 MDX 一起工作。我们将它们编译到这里。

组件列表

注意: 有另一个特定于 MDX 的组件吗?请发送 PR 将其添加到这里!

插件列表

另请参阅 remark 插件列表rehype 插件列表

注意: 有另一个特定于 MDX 的统一插件吗?请发送 PR 将其添加到这里!

使用插件

在插件名称中编码了传递插件的位置:remark 插件放在 ProcessorOptionsremarkPlugins 中,rehype 插件放在 rehypePlugins 中。这些字段期望插件列表和/或 [plugin, options] 的列表:

TypeScript

  1. import {compile} from '@mdx-js/mdx'
  2. import rehypeKatex from 'rehype-katex' // 使用 KaTeX 渲染数学公式。
  3. import remarkFrontmatter from 'remark-frontmatter' // YAML 和类似的。
  4. import remarkGfm from 'remark-gfm' // 表格、脚注、删除线、任务列表、文字 URL。
  5. import remarkMath from 'remark-math' // 支持像 `$so$` 这样的数学公式。
  6. const file = '# hi'
  7. // 一个插件:
  8. await compile(file, {remarkPlugins: [remarkGfm]})
  9. // 一个带有选项的插件:
  10. await compile(file, {remarkPlugins: [[remarkFrontmatter, 'toml']]})
  11. // 两个插件:
  12. await compile(file, {remarkPlugins: [remarkGfm, remarkFrontmatter]})
  13. // 两个插件,第一个带有选项:
  14. await compile(file, {remarkPlugins: [[remarkGfm, {singleTilde: false}], remarkFrontmatter]})
  15. // remark 和 rehype 插件:
  16. await compile(file, {rehypePlugins: [rehypeKatex], remarkPlugins: [remarkMath]})
  17. // remark 和 rehype 插件,最后一个带有选项:
  18. await compile(file, {
  19. // 一个带有选项的插件:
  20. rehypePlugins: [[rehypeKatex, {strict: true, throwOnError: true}]],
  21. remarkPlugins: [remarkMath]
  22. })

创建插件

为 MDX 创建插件与为 remark 或 rehype 创建插件基本相同。关于这方面的几篇指南和教程在 § 在 unifiedjs.com 上学习

有关插件的 MDX 特定部分,请阅读 ¶ 架构 以了解 @mdx-js/mdx 的工作原理。有关表示 MDX 特定功能的节点类型的信息,请参阅 remark-mdx 中的语法树 并使用我们的交互式 § Playground