Docusaurus 3.6
我们很高兴地宣布 Docusaurus 3.6。
Docusaurus 现在构建您的网站 ⚡️⚡️⚡️ 快得多。
升级应该很容易。我们的发布流程遵循语义版本控制。次要版本不包含任何重大更改。
亮点
此版本主要通过 Docusaurus Faster 项目侧重于构建性能。
Docusaurus Faster
Docusaurus Faster 项目的目标是减少构建时间和内存消耗。
我们进行了多项优化,并对基础设施进行了现代化改造,以使用更快的基于 Rust 的工具,主要包括
- 🦀 Rspack: 快速的基于 Rust 的 Web 打包器,几乎可以完全替代 webpack
- 🦀 SWC: 快速 Web 编译器,基于 Rust 的 Web 平台(HTML、CSS、JS)
- 🦀 Lightning CSS: 极速 CSS 解析器、转换器、打包器和压缩器
影响
采用新的基础设施可能会产生各种影响。不可能详尽列出所有影响,因此我们重点关注主要影响。
为了帮助您轻松采用,我们在预期的静态站点输出和浏览器支持方面一直相当保守。
构建时间
社区站点上的基准测试表明,您的生产站点构建速度有望达到 ⚡️2 到 4 倍!🔥
- React Native 官网: 提速 3.04 倍 🔥
- Babel 官网: 提速 3.27 倍 🔥
- Lexical 官网: 提速 2 倍 🔥
Rspack 暂不支持持久缓存,但这已在路线图上,并应很快实现。考虑到冷 Rspack 构建通常与使用持久缓存的暖 Webpack 构建一样快,我们认为这对采用 Rspack 来说不是问题。
内存消耗
您还应该注意到内存消耗的改善
- 新的基础设施整体内存消耗更少
- 我们修复了一个重要的内存泄漏问题,该问题尤其影响国际化站点
- 我们增加了CI 检查,以确保我们不会退步,并且我们的站点和初始化模板都可以在内存受限的环境中构建
- 我们增加了内部工具,以更好地了解构建的哪个步骤消耗内存
- 我们移除了一个
process.exit(0)
,它可能会隐藏您自己的代码和第三方插件中的内存泄漏
其他影响
- HTML 压缩器现在在HTML 标记无效时会发出警告
- 静态 HTML 输出缩小约 5%
- 一些错误通过新的基础设施自动修复
采用策略
这项新的基础设施是一项破坏性变更,但它是可选的,并且不需要 Docusaurus 的新主版本。
在使用 Docusaurus Faster 之前,请添加这个新包
- npm
- Yarn
- pnpm
- Bun
npm install @docusaurus/faster
yarn add @docusaurus/faster
pnpm add @docusaurus/faster
bun add @docusaurus/faster
为了帮助您在 Docusaurus v3 下逐步采用它,我们引入了一组您可以逐步激活的功能标志。
我们建议使用这个简单的布尔快捷方式一次性全部开启它们
const config = {
future: {
experimental_faster: true,
},
};
如果其中一个标志不适用于您的站点,可以单独开启功能标志
const config = {
future: {
experimental_faster: {
swcJsLoader: true,
swcJsMinimizer: true,
swcHtmlMinimizer: true,
lightningCssMinimizer: true,
rspackBundler: true,
mdxCrossCompilerCache: true,
},
},
};
swcJsLoader
: 使用 SWC 转译 JS(替代 Babel)swcJsMinimizer
: 使用 SWC 压缩 JS(替代 Terser)swcHtmlMinimizer
: 使用 SWC 压缩 HTML 和内联 JS/CSS(替代 html-minifier-terser)lightningCssMinimizer
: 使用 Lightning CSS 压缩 CSS(替代 cssnano 和 clean-css)rspackBundler
: 使用 Rspack 打包您的应用程序(替代 webpack)mdxCrossCompilerCache
: 仅编译 MDX 文件一次,同时支持浏览器/Node.js 环境,而非两次
请放心开启此功能。实验性的是配置选项。
新的基础设施坚固且经过我们的 CI 管道的良好测试。 Docusaurus 站点已在生产环境中使用它,我们也计划在其他 Meta 文档站点上使用它。
插件
新的基础设施使用 Rspack。巧合的是,Rspack 几乎与 webpack 100% 兼容,Rspack 不应破坏我们的插件生态系统。
大多数 Docusaurus 插件应该可以直接与 Rspack 配合使用,即使是那些实现了 configureWebpack
的插件。
然而,其中一些插件需要进行少量修改才能与 Rspack 兼容。一般的思路是避免直接导入 webpack
,而是使用“动态提供”的 webpack 实例
-import webpack from 'webpack';
export default function (context, options) {
return {
name: 'custom-docusaurus-plugin',
- configureWebpack(config, isServer) {
+ configureWebpack(config, isServer, {currentBundler}) {
return {
plugins: [
- new webpack.DefinePlugin({}),
+ new currentBundler.instance.DefinePlugin({}),
]
};
},
};
}
请查看专门的议题以获取指南和支持。
下一步
这仅仅是个开始:我们将继续致力于 Docusaurus Faster 项目,并已计划了更多性能改进。
根据您的反馈,我们计划在 Docusaurus 的下一个主要版本中将此新基础设施设为默认。
🙏 我们要感谢所有这些出色工具的作者,他们已经帮助我们让 Docusaurus 比以前快得多。特别感谢Rspack 团队,他们一路支持我们,非常迅速地处理了我们的反馈,并实现了我们所需的所有缺失功能,使其成为现实。👏
Rsdoctor 插件
在#10588 中,我们为 Rsdoctor 创建了一个 Docusaurus 插件。它分析 Docusaurus 的打包阶段,帮助您找出在加载器、插件和压缩器方面哪些因素降低了打包器的速度。它适用于 webpack 和 Rspack。
要使用它,请安装新的 @docusaurus/plugin-rsdoctor
包,然后将其作为插件添加到您的配置中
export default {
plugins: [
[
'rsdoctor',
{
/* options */
},
],
],
};
根据环境变量有条件地开启它
export default {
plugins: [
process.env.RSDOCTOR === 'true' && [
'rsdoctor',
{
/* options */
},
],
],
};
# Build without Rsdoctor
npm run build
# Build with Rsdoctor
RSDOCTOR=true npm run build
Mermaid
在#10510 中,我们放宽了 Mermaid 图表依赖范围,以允许更新的 Mermaid 主要版本。我们现在支持 Mermaid 10/11,并预计未来的版本也能兼容,让您可以根据自己的条件进行升级。
这解锁了新的图表类型,例如架构图
翻译
其他更改
其他值得注意的更改包括
- #10586: 博客支持
frontMatter.title_meta
,用于出于 SEO 原因覆盖frontMatter.title
。 - #10600:
docusaurus build
和docusaurus deploy
现在支持多个--locale
CLI 参数。 - #10454:
docusaurus-remark-plugin-npm2yarn
升级到npm-to-yarn v3
,并可以转换npx
命令。 - #10612: Canary 版本将使用
3.5.2-canary-<number>
而非0.0.0-canary-<number>
,以遵守插件的peerDependency
约束。 - #10547:
@docusaurus/tsconfig
升级到target: 'es2022'
。 - #10514: 从 Docusaurus 初始化模板中移除
babel.config.js
,以阻止自定义 Babel。
查看3.6.0 更新日志条目以获取完整的更改列表。