Skip to main content
Version: 3.2.1

升级到 Docusaurus v3

本文档将帮助您将站点从Docusaurus v2升级到Docusaurus v3。

Docusaurus v3 是一个新的主要版本,包含重大变更,需要您相应地调整您的网站。我们将在此过程中为您提供指导,并提及一些可选的建议。

这不是一个完整的重写,而且破坏性变化相对容易处理。最简单的站点最终只需更新其npm依赖项即可升级。

主要的重大变化是从MDX v1升级到MDX v3。请阅读MDX v2MDX v3的发布说明以获取详细信息。MDX现在将更严格地编译您的Markdown内容,并且会有细微的差异

Before upgrading

在升级之前,我们建议为Docusaurus v3准备您的站点。有一些更改您已经可以在Docusaurus v2下逐步处理。这样做将有助于减少最终升级到Docusaurus v3所需的工作。

对于复杂的站点,我们还建议设置视觉回归测试,这是确保您的站点在视觉上保持一致的好方法。Docusaurus v3主要升级依赖项,预计不会产生任何视觉变化。

note

查看Docusaurus v3.0.0的发布说明,并浏览拉取请求以获取更多有用的信息以及此处提到的每个更改背后的动机。

升级依赖

升级到 Docusaurus v3 需要升级核心的 Docusaurus 依赖(@docusaurus/name),以及其他相关的包。

Docusaurus v3 现在使用以下依赖项:

  • Node.js v18.0+
  • React v18.0+
  • MDX v3.0+
  • TypeScript v5.1+
  • prism-react-renderer v2.0+
  • react-live v4.0+
  • remark-emoji v4.0+
  • mermaid v10.4+
Upgrading community plugins

如果您的网站使用了第三方社区插件和主题,您可能需要升级它们。

在尝试升级之前,请确保这些插件与Docusaurus v3兼容。

一个典型的 package.json 依赖升级示例:

package.json
 {
"dependencies": {
// upgrade to Docusaurus v3
- "@docusaurus/core": "2.4.3",
- "@docusaurus/preset-classic": "2.4.3",
+ "@docusaurus/core": "3.0.0",
+ "@docusaurus/preset-classic": "3.0.0",
// upgrade to MDX v3
- "@mdx-js/react": "^1.6.22",
+ "@mdx-js/react": "^3.0.0",
// upgrade to prism-react-renderer v2.0+
- "prism-react-renderer": "^1.3.5",
+ "prism-react-renderer": "^2.1.0",
// upgrade to React v18.0+
- "react": "^17.0.2",
- "react-dom": "^17.0.2"
+ "react": "^18.2.0",
+ "react-dom": "^18.2.0"
},
"devDependencies": {
// upgrade Docusaurus dev dependencies to v3
- "@docusaurus/module-type-aliases": "2.4.3",
- "@docusaurus/types": "2.4.3"
+ "@docusaurus/module-type-aliases": "3.0.0",
+ "@docusaurus/types": "3.0.0"
}
"engines": {
// require Node.js 18.0+
- "node": ">=16.14"
+ "node": ">=18.0"
}
}

对于TypeScript用户:

package.json
 {
"devDependencies": {
// swap the external TypeScript config package for the new official one
- "@tsconfig/docusaurus": "^1.0.7",
+ "@docusaurus/tsconfig": "3.0.0",
// upgrade React types to v18.0+
- "@types/react": "^17.0.69",
+ "@types/react": "^18.2.29",
// upgrade TypeScript to v5.1+
- "typescript": "~4.7.4"
+ "typescript": "~5.2.2"
}
}

升级MDX

MDX 是 Docusaurus 的主要依赖项,负责将您的 .md.mdx 文件编译为 React 组件。

从MDX v1过渡到MDX v3是采用Docusaurus v3的主要挑战。大多数破坏性变化来自MDX v2,而MDX v3是一个相对较小的版本。

一些在Docusaurus v2下成功编译的文档现在可能在Docusaurus v3下无法编译

Find problematic content ahead of time

在您的站点上运行npx docusaurus-mdx-checker以获取在Docusaurus v3下将无法编译的文件列表。

此命令也是估算使您的内容兼容所需工作量的好方法。请记住,大部分工作可以通过为Docusaurus v3准备您的内容在升级前完成。

其他文档可能也会呈现不同

Use visual regression tests

对于大型网站,手动审查所有页面很复杂,我们建议您设置视觉回归测试

升级MDX会带来所有在MDX v2MDX v3发布博客文章中记录的重大变更。大多数重大变更来自MDX v2,而MDX v3是一个相对较小的发布。MDX v2迁移指南中有一个关于如何更新MDX文件的部分,这对我们特别相关。同时,请务必阅读MDX故障排除页面,它可以帮助你解释常见的MDX错误信息。

请务必阅读我们更新的MDX 和 React文档页面。

使用MDX游乐场

MDX 游乐场是您的新好朋友。它允许您了解您的内容是如何编译为 React 组件的,并单独解决编译或渲染问题。

Configuring the MDX playground options for Docusaurus

要获得类似于Docusaurus v2使用的编译行为,请在MDX playground上打开这些选项:

  • 使用MDX
  • 使用remark-gfm
  • 使用remark-directive

MDX playground选项面板的截图,仅选中了“使用MDX”、“使用remark-gfm”和“使用remark-directive”选项

使用两个MDX游乐场并排,您很快会注意到一些内容在v2中编译方式不同或无法编译。

Making your content future-proof

目标将是重构你的问题内容,使其与两个版本的MDX都能正常工作。这样,当你升级到Docusaurus v3时,这些内容将已经可以开箱即用。

使用MDX检查器CLI

我们提供了一个docusaurus-mdx-checker CLI,可以轻松发现有问题内容。在您的站点上运行此命令,以获取在MDX v3下无法编译的文件列表。

npx docusaurus-mdx-checker

对于每个编译问题,CLI 将记录文件路径和需要查看的行号。

终端截图显示了一个MDX检查器CLI输出的示例,带有一些错误信息

tip

使用此CLI来估计使您的内容与MDX v3兼容所需的工作量。

warning

此CLI是尽力而为的,并且只会报告编译错误

它不会报告那些不会产生错误但可能影响内容显示的细微编译变化。为了捕捉这些问题,我们建议使用视觉回归测试

常见的MDX问题

Docusaurus 无法详尽地记录 MDX 带来的所有变化。这是 MDX v2MDX v3 迁移指南的责任。

然而,通过升级几个Docusaurus站点,我们注意到大多数问题归结为我们为您记录的少数几种情况。

错误使用 {

{ 字符用于打开 JavaScript 表达式。如果你在 {expression} 中放入的内容不是有效的表达式,MDX 现在将会失败。

example.md
The object shape looks like {username: string, age: number}
Error message

无法使用acorn解析表达式:表达式后出现意外内容

How to upgrade

修复此错误的可用选项:

  • 使用内联代码:{username: string, age: number}
  • 使用HTML代码:{
  • 转义它:\{

<的错误使用

< 字符用于打开 JSX 标签。如果 MDX 认为你的 JSX 无效,它现在会失败。

example.md
Use Android version <5

You can use a generic type like Array<T>

Follow the template "Road to <YOUR_MINOR_VERSION>"
Error messages

名称前出现意外的字符 5 (U+0035),期望是一个可以开始名称的字符,例如字母、$_

paragraph结束标签之前,期望有一个 (1:6-1:9)的闭合标签 end-tag-mismatch mdast-util-mdx-jsx

期望在paragraph结束之前有一个 (134:19-134:39)的闭合标签

How to upgrade

修复此错误的可用选项:

  • 使用内联代码:Array
  • 使用HTML代码:<<
  • 转义它:\<

Docusaurus 支持 GitHub Flavored Markdown (GFM),但 MDX 不再支持使用 语法的 autolink

example.md
<[email protected]>

<http://localhost:3000>
Error messages

名称中出现意外的字符 @ (U+0040),预期应为字母、数字、$_ 等名称字符;属性前的空白;或标签的结束(注意:在 MDX 中创建链接,请使用 [text](url)

在本地名称之前出现意外的字符 / (U+002F),期望是一个可以开始名称的字符,例如字母、$_(注意:在MDX中创建链接,请使用 [text](url)

How to upgrade

使用常规的Markdown链接,或者移除<>。MDX和GFM已经能够自动链接字面量。

example.md
[email protected]
[[email protected]](mailto:[email protected])

http://localhost:3000
[http://localhost:3000](http://localhost:3000)

小写 MDXComponent 映射

对于提供自定义MDXComponent映射的用户,组件现在被“沙盒化”:

  • 一个 MDXComponent 映射仅用于 # hi 而不用于

    hi

  • 一个小写的自定义元素名称将不再由其相应的MDXComponent组件替换
visual difference

您的MDXComponent 组件映射可能不会像以前那样应用,您的自定义组件可能不再被使用。

How to upgrade

对于原生的Markdown元素,你可以继续使用小写ph1imga...

对于任何其他元素,使用大写名称

src/theme/MDXComponents.js
 import MDXComponents from '@theme-original/MDXComponents';

export default {
...MDXComponents,
p: (props) =>


- myElement: (props) =>
,

+ MyElement: (props) =>
,

};

意外的额外段落

在MDX v3中,现在可以更轻松地交错使用JSX和Markdown,而无需额外的换行符。在多行上编写内容也可以生成新的预期

标签。

visual difference

查看MDX v1和v3如何以不同方式呈现此内容。

example.md
<div>一些 **Markdown** 内容div>
<div>
一些 **Markdown** 内容
div>
MDX v1 输出
<div>一些 **Markdown** 内容div>
<div>一些 **Markdown** 内容div>
MDX v3 输出
<div>一些 <strong>Markdownstrong> 内容div>
<div><p>一些 <strong>Markdownstrong> 内容p>div>

How to upgrade

如果你不想要额外的

标签,可以根据具体情况重构内容,使用单行JSX标签。
 

My alt
-

- 我的图片说明
-
+
我的图片说明


指令的意外使用

Docusaurus v3 现在使用 Markdown Directives(通过 remark-directive 实现)作为一种通用方式来支持 admonitions 和其他即将推出的 Docusaurus 功能。

example.md
This is a :textDirective

::leafDirective

:::containerDirective

Container directive content

:::
Visual change

指令被解析的目的是由其他Remark插件处理。未处理的指令将被忽略,并且不会以其原始形式呈现。

example.md
AWS re:Invent 会议很棒

由于 :Invent 被解析为文本指令,现在将呈现为:

AWS re
会议很棒

How to upgrade
  • 使用HTML代码::
  • :后添加一个空格(如果有意义的话):: text
  • 转义它:\:

不支持的缩进代码块

MDX 不再将缩进文本转换为代码块。

example.md
    console.log("hello");
Visual change

升级通常不会产生新的MDX编译错误,但由于不再有代码块,可能会导致内容以意外的方式呈现。

How to upgrade

使用常规的代码块语法而不是缩进:

example.md
```js
console.log('hello');
```

其他Markdown不兼容性

强调以空格或标点符号开头或结尾

新的MDX解析器现在严格遵循CommonMark规范。自v0.14版本以来,CommonMark规范引入了关于空格和标点符号的强调规则,这些规则尤其与不使用空格分隔单词的语言不兼容。

日语和中文受此影响最大,但也有一些其他语言可能会受到影响(例如泰语和高棉语),例如当您尝试强调内联代码或链接时。使用空格分隔单词的语言受到的影响要小得多。

**(除了`**`)在以下示例中在Docusaurus 2中被正确解析,但在Docusaurus 3中不再如此。

example.md
**Do not end a range of emphasis with a space. **Or `**` will not work as intended.

<!-- Japanese -->
**「。」の後に文を続けると`**`が意図した動作をしません。**また、**[リンク](https://docusaurus.io/)****`コード`**のすぐ外側に`**`、そのさらに外側に句読点以外がある場合も同様です。
See the detailed conditions and how to upgrade

If * or ** matches either of the following conditions, it will not work as the beginning of an emphasis mark anymore:

  • The next character is a space (e.g. word* word)
  • The previous character is a punctuation character and the next character is a letter (not a space or punctuation character) (e.g. 文**(文))

On the contrary, if * or ** matches either of the following conditions, it will not work as the end of an emphasis mark anymore:

  • The previous character is a space (e.g. word *word)
  • The next character is a punctuation character and the previous character is a letter (e.g. 文。**文)

“A punctuation character” includes non-ASCII ones, brackets, quotation marks and some symbols including % and @. More strictly speaking, a character whose 2-letters Unicode category starts with P is treated as a punctuation character here.

How to upgrade

If the offending emphasis mark is next to a space, move the space out of the range of emphasis:

english.md
**Do not end a range of emphasis with a space.** Or `**` will not work.

If the offending emphasis mark is surrounded by both a punctuation character and a letter, you can fix it without modifying the content by:

  1. Convert the document to MDX if it is a vanilla Markdown.
  2. replace the offending emphasis mark with a raw HTML tag (<em> or <strong>) instead:
japanese.mdx
<strong>「。」の後に文を続けると`**`が意図した動作をしません。</strong>また、<strong>[リンク](https://docusaurus.io/)</strong>や<strong>`コード`</strong>のすぐ外側に`**`、そのさらに外側に句読点以外がある場合も同様です。

While not an ideal solution, you can also either of the following without converting the document to MDX:

  • Move the most outside punctuation character out of the emphasis mark.

    japanese.md
    **「。」の後に文を続けると`**`が意図した動作をしません**。また、[**リンク**](https://docusaurus.io/)や・・・
  • Put a space just outside of the offending * or **. This solution does not force you to convert the document to MDX.

    japanese.md
    **「。」の後に文を続けると`**`が意図した動作をしません。** また、**[リンク](https://docusaurus.io/)****`コード`** のすぐ外側に`**`、そのさらに外側に句読点以外がある場合も同様です。

MDX 插件

MDX生态系统中的所有官方包(Unified、Remark、Rehype...)现在都仅支持ES模块,不再支持CommonJS

实际上,这意味着你不能再做require("remark-plugin")了。

How to upgrade

Docusaurus v3 现在支持 ES Modules 配置文件。我们建议您将配置文件迁移到 ES 模块,这样您可以轻松导入 Remark 插件:

docusaurus.config.js
import remarkPlugin from 'remark-plugin';

export default {
title: 'Docusaurus',
/* 在此处使用 Remark 插件的站点配置 */
};

如果您想继续使用 CommonJS 模块,您可以使用动态导入作为一种变通方法,使您能够在 CommonJS 模块中导入 ES 模块。幸运的是,Docusaurus 配置支持使用异步函数来让您实现这一点。

docusaurus.config.js
module.exports = async function () {
const myPlugin = (await import('remark-plugin')).default;
return {
// 站点配置...
};
};

For plugin authors

如果您创建了自定义的Remark或Rehype插件,由于新的AST结构,您可能需要重构这些插件,或者最终完全重写它们。我们创建了一个专门的支持讨论,以帮助插件作者升级他们的代码。

格式化工具

Prettier,最常见的格式化工具,仅支持旧版的MDX v1,截至Docusaurus v3.0.0还不支持v3。你可以在代码的不兼容部分前添加{/* prettier-ignore */},使其与Prettier兼容。

{/* prettier-ignore */}
<SomeComponent>Some long text in the component</SomeComponent>

如果你厌倦了插入太多的{/* prettier-ignore */},你可以考虑通过在.prettierignore文件中添加以下内容来禁用Prettier的MDX格式化,直到它开始支持MDX v3:

.prettierignore
*.mdx

其他重大变更

除了MDX v3升级外,以下是Docusaurus v3带来的详尽破坏性更改列表。

Node.js v18.0

Node.js 16 已达到生命周期结束,Docusaurus v3 现在需要 Node.js >= 18.0

How to upgrade

在您的计算机上安装 Node.js 18.0+。

最终,配置您的持续集成、CDN 或主机以使用此新版本的 Node.js。

您还可以更新您的站点 package.json 以防止使用不再支持的旧版本:

package.json
 {
"engines": {
- "node": ">=16.14"
+ "node": ">=18.0"
}
}

在升级到 Docusaurus v3 之前,将您的 Docusaurus v2 站点升级到 Node.js 18。

React v18.0+

Docusaurus v3 现在需要 React >= 18.0

React 18 带来了其自身的重大变化,这些变化应该相对容易处理,具体取决于您为网站创建的自定义 React 代码量。官方主题和插件与 React 18 兼容。

How to upgrade

阅读官方的React v18.0如何升级到React 18,并查看你自己的React代码,找出哪些组件可能会受到此次升级的影响。

我们建议特别关注:

  • 有状态组件的自动批处理
  • 控制台报告的新React水合错误

Experimental support for React 18 features

React 18 带来了新功能:

  • React.lazy()
  • startTransition

它们的 Docusaurus 支持被视为实验性的。我们可能需要在未来调整集成,导致不同的运行时行为。

Prism-React-Renderer v2.0+

Docusaurus v3 将 prism-react-renderer 升级到 v2.0+。该库用于代码块的语法高亮显示。

How to upgrade

这是一个包含重大变更的新主要库版本,我们无法保证严格的向后兼容性。prism-react-renderer v2 发布说明 并不十分详尽,但 Docusaurus 用户需要注意的三大变化。

依赖项应升级为:

package.json
 {
"dependencies": {
- "prism-react-renderer": "^1.3.5",
+ "prism-react-renderer": "^2.1.0",
}

在 Docusaurus 配置文件中导入主题的 API 已更新:

docusaurus.config.js
- const lightTheme = require('prism-react-renderer/themes/github');
- const darkTheme = require('prism-react-renderer/themes/dracula');
+ const {themes} = require('prism-react-renderer');
+ const lightTheme = themes.github;
+ const darkTheme = themes.dracula;

以前,react-prism-render v1 默认包含更多语言。从 v2.0+ 开始,默认包含的语言较少。您可能需要在 Docusaurus 配置中添加额外的语言:

docusaurus.config.js
const siteConfig = {
themeConfig: {
prism: {
additionalLanguages: ['bash', 'diff', 'json'],
},
},
};

React-Live v4.0+

对于使用@docusaurus/theme-live-codeblock包的用户,Docusaurus v3将react-live升级到v4.0+。

How to upgrade

理论上,你不需要做任何事情,你现有的交互式代码块应该像以前一样继续工作。

然而,这是一个包含重大更改的新主要库版本,我们不能保证严格的向后兼容性。如果遇到问题,请阅读v3v4的变更日志。

remark-emoji v4.0+

Docusaurus v3 将 remark-emoji 升级到 v4.0+。这个库用于支持 Markdown 中的 :emoji: 快捷方式。

How to upgrade

大多数Docusaurus用户无需做任何事情。使用表情符号短代码的用户应阅读更新日志并仔细检查他们的表情符号是否按预期渲染。

重大变更node-emoji从v1更新到v2。此变更引入了对许多新表情符号的支持,并删除了在GitHub上不再有效的旧表情符号短代码。

Mermaid v10.4+

对于使用@docusaurus/theme-mermaid包的用户,Docusaurus v3将mermaid升级到v10.4+。

How to upgrade

理论上,你不需要做任何事情,你现有的图表应该像以前一样继续工作。

然而,这是一个包含重大更改的新主要库版本,我们不能保证严格的向后兼容性。如果遇到问题,请阅读v10的变更日志。

TypeScript v5.1+

Docusaurus v3 现在需要 TypeScript >= 5.1

How to upgrade

升级您的依赖项以使用 TypeScript 5+

package.json
 {
"devDependencies": {
- "typescript": "~4.7.4"
+ "typescript": "~5.2.2"
}
}

TypeScript 基础配置

官方的Docusaurus TypeScript配置已经从外部包@tsconfig/docusaurus重新内部化到我们的新monorepo包@docusaurus/tsconfig

这个新包的版本与所有其他Docusaurus核心包的版本保持一致,并将用于确保TypeScript的向后兼容性以及在主要版本升级时的破坏性更改。

How to upgrade

将外部的 TypeScript 配置包替换为新的官方包

package.json
 {
"devDependencies": {
- "@tsconfig/docusaurus": "^1.0.7",
+ "@docusaurus/tsconfig": "3.0.0",
}
}

在你的 tsconfig.json 文件中使用它:

tsconfig.json
 {
- "extends": "@tsconfig/docusaurus/tsconfig.json",
+ "extends": "@docusaurus/tsconfig",
"compilerOptions": {
"baseUrl": "."
}
}

新配置加载器

Docusaurus v3 将其内部配置加载库从 import-fresh 更改为 jiti。它负责加载诸如 docusaurus.config.jssidebars.js 等文件,以及 Docusaurus 插件。

How to upgrade

理论上,你不需要做任何事情,你现有的配置文件应该像以前一样继续工作。

然而,这是一个主要的依赖项交换,可能会出现一些微妙的行为变化。

警告提示

由于历史原因,我们支持一个未记录的警告 :::warning,它以红色呈现。

Warning

这是一个 Docusaurus v2 :::warning 警告提示。

然而,颜色和图标一直有误。Docusaurus v3 正式重新引入了 :::warning 警告提示,并对其进行了文档化,同时修复了颜色和图标。

warning

这是一个 Docusaurus v3 :::warning 警告提示。

How to upgrade

如果您之前使用了未记录的:::warning警告,请确保每次使用时验证黄色是否现在是合适的颜色。如果您想保留红色,请改用:::danger

Docusaurus v3 还弃用了:::caution警告。请将:::caution(黄色)重构为:::warning(黄色)或:::danger(红色)。

如果您想保留标题“caution”,您可能需要将其重构为:::warning[caution](黄色)。

版本化侧边栏

此重大更改仅会影响在v2.0.0-beta.10(2021年12月)之前对其文档进行版本控制的Docusaurus v2早期采用者

在创建版本 v1.0.0 时,侧边栏文件包含了一个前缀 version-v1.0.0/,该前缀 Docusaurus v3 不再支持

versioned_sidebars/version-v1.0.0-sidebars.json
{
"version-v1.0.0/docs": [
"version-v1.0.0/introduction",
"version-v1.0.0/prerequisites"
]
}
How to upgrade

从你的版本化侧边栏中移除无用的版本前缀。

versioned_sidebars/version-v1.0.0-sidebars.json
{
"docs": ["introduction", "prerequisites"]
}

博客订阅限制

@docusaurus/plugin-content-blog 现在默认将 RSS 源限制为最近的 20 条条目。对于大型的 Docusaurus 博客来说,这是一个更合理的默认值,以避免 RSS 文件变得越来越大。

How to upgrade

如果你不喜欢这个新的默认行为,你可以使用新的limit: false feed选项恢复到以前的“无限feed”行为:

docusaurus.config.js
const blogOptions = {
feedOptions: {
limit: false,
},
};

文档主题重构

对于已经混用了文档相关主题组件(如@theme/DocPage)的用户,这些组件已经进行了重大重构,以便更容易进行自定义。

从技术上讲,这不是一个破坏性更改,因为这些组件被标记为不安全以进行混用,然而许多Docusaurus站点弹出了与文档相关的组件,并且会感兴趣知道他们的自定义可能会破坏Docusaurus。

How to upgrade

删除所有你自定义的组件,重新自定义它们,并在新更新的组件上重新应用你的自定义设置。

或者,你可以查看pull-request notes来理解新的主题组件树结构,并最终尝试手动修补你自定义的组件。

可选更改

一些更改并非强制性的,但了解它们仍然有助于充分利用 Docusaurus v3。

自动 JSX 运行时

Docusaurus v3 现在使用 React 18 的 "自动" JSX 运行时

在不再使用任何React API的JSX文件中,不再需要导入React。

src/components/MyComponent.js
- import React from 'react';

export default function MyComponent() {
return <div>Hello</div>;
}

ESM 和 TypeScript 配置

Docusaurus v3 支持 ESM 和 TypeScript 配置文件,采用这些新选项可能是个好主意。

docusaurus.config.js
export default {
title: 'Docusaurus',
url: 'https://docusaurus.io',
// your site config ...
};
docusaurus.config.ts
import type {Config} from '@docusaurus/types';
import type * as Preset from '@docusaurus/preset-classic';

const config: Config = {
title: 'My Site',
favicon: 'img/favicon.ico',
presets: [
[
'classic',
{
/* Your preset config here */
} satisfies Preset.Options,
],
],

themeConfig: {
/* Your theme config here */
} satisfies Preset.ThemeConfig,
};

export default config;

使用 .mdx 扩展

我们建议在Markdown文件中使用JSX、importexport(即MDX功能)时使用.mdx扩展名。这在语义上更正确,并提高了与外部工具(IDE、格式化程序、linter等)的兼容性。

在未来的Docusaurus版本中,.md文件将被解析为标准CommonMark,这不支持这些功能。在Docusaurus v3中,.md文件仍然被编译为MDX文件,但可以选择选择CommonMark

升级数学包

如果您使用Docusaurus来渲染数学公式,您应该升级MDX插件。

确保为Docusaurus v3(使用MDX v3)使用remark-math 6rehype-katex 7。我们不能保证其他版本会正常工作。

{
- "remark-math": "^3.0.0",
+ "remark-math": "^6.0.0",
- "rehype-katex": "^5.0.0"
+ "rehype-katex": "^7.0.0"
}

关闭 MDX v1 兼容性

Docusaurus v3 提供了 MDX v1 兼容性选项,默认情况下是开启的。

docusaurus.config.js
export default {
markdown: {
mdx1Compat: {
comments: true,
admonitions: true,
headingIds: true,
},
},
};

comments 选项

此选项允许在MDX中使用HTML注释,尽管HTML注释已不再正式支持。

对于MDX文件,我们建议逐步使用MDX {/* 注释 */} 而不是HTML ,然后关闭此兼容性选项。

Blog truncate marker

默认的博客截断标记现在支持 {/* truncate */}

admonitions 选项

此选项允许使用 Docusaurus v2 admonition title 语法:

:::note Your Title

content

:::

Docusaurus 现在使用 Markdown Directives(通过 remark-directive 实现)来实现 admonitions,提供指令标签的语法需要方括号:

:::note[Your Title]

content

:::

我们建议逐步使用新的Markdown指令标签语法,然后关闭此兼容性选项。

headingIds 选项

此选项允许使用 Docusaurus v2 显式标题 ID 语法:

### Hello World {#my-explicit-id}

此语法现在无效的MDX,并且需要转义{字符:\{#my-explicit-id}

我们建议暂时保持此兼容性选项开启,直到我们提供与较新版本的MDX兼容的新语法。

故障排除

如果遇到任何升级问题,首先尝试的是:

  • 确保所有文档都能在MDX playground中编译,或者使用npx docusaurus-mdx-checker
  • 删除 node_modulespackage-lock.json,然后再次运行 npm install
  • 运行 docusaurus clear 以清除缓存
  • 移除可能不支持 Docusaurus v3 的第三方插件
  • 删除所有你的swizzled组件

一旦你尝试过,你可以通过以下支持渠道寻求帮助:

请考虑我们的时间非常宝贵。为了确保您的支持请求不被忽视,我们恳请您:

  • 提供一个我们可以轻松运行的最小化复现,最好使用docusaurus.new创建
  • 提供一个实时部署的URL,展示问题在实际中的表现(如果您的站点可以构建)
  • 清楚地解释问题,而不仅仅是含糊其辞的“它不起作用”
  • 尽可能包含相关材料:代码片段、仓库URL、Git分支URL、完整堆栈跟踪、截图和视频
  • 清晰地、简洁地呈现你的请求,向我们展示你已经努力帮助我们帮助你

或者,您可以寻找一个付费的Docusaurus 服务提供商来为您执行此升级。如果您的网站是开源的,您也可以向我们的社区寻求免费、善意的帮助