mirror of
https://github.com/facebook/docusaurus.git
synced 2025-08-04 01:09:20 +02:00
chore: release Docusaurus v3.6 (#10633)
This commit is contained in:
parent
fce0884768
commit
ed2cdf391f
151 changed files with 21966 additions and 223 deletions
BIN
website/blog/releases/3.6/img/rsdoctor.jpg
Normal file
BIN
website/blog/releases/3.6/img/rsdoctor.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 130 KiB |
BIN
website/blog/releases/3.6/img/social-card.png
Normal file
BIN
website/blog/releases/3.6/img/social-card.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 188 KiB |
251
website/blog/releases/3.6/index.mdx
Normal file
251
website/blog/releases/3.6/index.mdx
Normal file
|
@ -0,0 +1,251 @@
|
|||
---
|
||||
title: Docusaurus 3.6
|
||||
authors: [slorber]
|
||||
tags: [release]
|
||||
image: ./img/social-card.png
|
||||
date: 2024-11-04
|
||||
---
|
||||
|
||||
We are happy to announce **Docusaurus 3.6**.
|
||||
|
||||
Docusaurus is now ⚡️⚡️⚡️ **much faster** to build your site.
|
||||
|
||||
Upgrading should be easy. Our [release process](/community/release-process) respects [Semantic Versioning](https://semver.org/). Minor versions do not include any breaking changes.
|
||||
|
||||

|
||||
|
||||
{/* truncate */}
|
||||
|
||||
## Highlights
|
||||
|
||||
This release has been mostly focused on build performance through the [Docusaurus Faster](https://github.com/facebook/docusaurus/issues/10556) project.
|
||||
|
||||
## Docusaurus Faster
|
||||
|
||||
The [Docusaurus Faster](https://github.com/facebook/docusaurus/issues/10556) project's goal is to reduce the build times and memory consumption.
|
||||
|
||||
We have worked on multiple optimizations and modernized our infrastructure to use faster Rust-based tools, notably:
|
||||
|
||||
- 🦀 [Rspack](https://rspack.dev/): Fast Rust-based web bundler, almost drop-in replacement for [webpack](https://webpack.js.org/)
|
||||
- 🦀 [SWC](https://swc.rs/): Speedy Web Compiler, Rust-based platform for the Web (HTML, CSS, JS)
|
||||
- 🦀 [Lightning CSS](https://lightningcss.dev/): An extremely fast CSS parser, transformer, bundler, and minifier
|
||||
|
||||
### Impacts
|
||||
|
||||
Adopting a new infrastructure can have various impacts. It's impossible to list them all exhaustively, so let's focus on the major ones.
|
||||
|
||||
To help you adopt it easily, we have been fairly conservative in terms of expected static site output and [browser support](/docs/browser-support).
|
||||
|
||||
#### Build Time
|
||||
|
||||
Benchmarks on community site show that you can expect your production site to build ⚡️**2 to 4 times faster**! 🔥:
|
||||
|
||||
- [React Native website](https://github.com/facebook/react-native-website/pull/4268): 3.04x faster 🔥
|
||||
- [Babel website](https://github.com/babel/website/pull/2997): 3.27x faster 🔥
|
||||
- [Lexical website](https://github.com/facebook/lexical/pull/6761): 2x faster 🔥
|
||||
|
||||
[How to benchmark](https://github.com/facebook/docusaurus/issues/10556#issuecomment-2407671873)
|
||||
|
||||
:::note About rebuilds
|
||||
|
||||
[Rspack doesn't support persistent caching yet](https://rspack.dev/misc/planning/roadmap#persistent-cache), but it's on the roadmap and should be implemented soon. We think it's not a problem for the adoption of Rspack considering a cold Rspack build is usually as fast as a warm Webpack build using persistent caching.
|
||||
|
||||
:::
|
||||
|
||||
#### Memory Consumption
|
||||
|
||||
You should also notice an improvement in memory consumption:
|
||||
|
||||
- The new infrastructure consumes less memory overall
|
||||
- We fixed an important [memory leak](https://github.com/facebook/docusaurus/pull/10599) that affects in particular i18n sites
|
||||
- We added [CI checks](https://github.com/facebook/docusaurus/pull/10601) to ensure that we don't regress, and that our site and init template can both build in a memory-constrained environments
|
||||
- We added [internal tooling](https://github.com/facebook/docusaurus/pull/10590) to better understand which step of a build consumes memory
|
||||
- We [removed a `process.exit(0)`](https://github.com/facebook/docusaurus/pull/10410) that can hide memory leaks in your own code and third-party plugins
|
||||
|
||||
#### Other Impacts
|
||||
|
||||
- The HTML minifier now [emits warnings in case of invalid HTML markup](https://github.com/facebook/docusaurus/discussions/10580)
|
||||
- The static HTML output is [~5% smaller](https://github.com/facebook/docusaurus/pull/10554)
|
||||
- Some bugs are automatically fixed by the new infrastructure
|
||||
|
||||
### Adoption Strategy
|
||||
|
||||
This new infrastructure is a breaking change, but it is opt-in and does not require a new major version of Docusaurus.
|
||||
|
||||
Before using Docusaurus Faster, add this new package:
|
||||
|
||||
```bash npm2yarn
|
||||
npm install @docusaurus/faster
|
||||
```
|
||||
|
||||
To help you **adopt it incrementally under Docusaurus v3**, we're introducing a set of feature flags that you can activate progressively.
|
||||
|
||||
We recommend turning them on all at once with this simple boolean shortcut:
|
||||
|
||||
```js
|
||||
const config = {
|
||||
future: {
|
||||
experimental_faster: true,
|
||||
},
|
||||
};
|
||||
```
|
||||
|
||||
In case one of the flags does not work for your site, it's possible to turn feature flags on independently:
|
||||
|
||||
```ts
|
||||
const config = {
|
||||
future: {
|
||||
experimental_faster: {
|
||||
swcJsLoader: true,
|
||||
swcJsMinimizer: true,
|
||||
swcHtmlMinimizer: true,
|
||||
lightningCssMinimizer: true,
|
||||
rspackBundler: true,
|
||||
mdxCrossCompilerCache: true,
|
||||
},
|
||||
},
|
||||
};
|
||||
```
|
||||
|
||||
- [`swcJsLoader`](https://github.com/facebook/docusaurus/pull/10435): Use [SWC](https://swc.rs/) to transpile JS (instead of [Babel](https://babeljs.io/))
|
||||
- [`swcJsMinimizer`](https://github.com/facebook/docusaurus/pull/10441): Use [SWC](https://swc.rs/) to minify JS (instead of [Terser](https://github.com/terser/terser))
|
||||
- [`swcHtmlMinimizer `](https://github.com/facebook/docusaurus/pull/10554): Use [SWC](https://swc.rs/) to minify HTML and inlined JS/CSS (instead of [html-minifier-terser](https://github.com/terser/html-minifier-terser))
|
||||
- [`lightningCssMinimizer`](https://github.com/facebook/docusaurus/pull/10522): Use [Lightning CSS](https://lightningcss.dev/) to minify CSS (instead of [cssnano](https://github.com/cssnano/cssnano) and [clean-css](https://github.com/clean-css/clean-css))
|
||||
- [`rspackBundler`](https://github.com/facebook/docusaurus/pull/10402): Use [Rspack](https://rspack.dev/) to bundle your app (instead of [webpack](https://webpack.js.org/))
|
||||
- [`mdxCrossCompilerCache`](https://github.com/facebook/docusaurus/pull/10479): Compile MDX files once for both browser/Node.js environments instead of twice
|
||||
|
||||
:::tip Experimental but safe
|
||||
|
||||
Don't be afraid to turn this feature on. What's experimental is the config options.
|
||||
|
||||
The new infrastructure is robust and well-tested by our CI pipeline. The [Docusaurus site](https://docusaurus.io/) already uses it in production, and we plan to use it on other Meta docs sites as well.
|
||||
|
||||
:::
|
||||
|
||||
#### Plugins
|
||||
|
||||
The new infrastructure uses [Rspack](https://rspack.dev/). By chance, Rspack is almost 100% compatible with [webpack](https://webpack.js.org/), and Rspack shouldn't break our plugin ecosystem.
|
||||
|
||||
Most Docusaurus plugins should work out of the box with Rspack, even those implementing [`configureWebpack`](/docs/api/plugin-methods/lifecycle-apis#configureWebpack).
|
||||
|
||||
However, some of them will require small modifications to make them compatible with Rspack. The general idea is to avoid importing `webpack` directly, and use the "dynamically provided" webpack instance instead:
|
||||
|
||||
```diff
|
||||
-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({}),
|
||||
]
|
||||
};
|
||||
},
|
||||
};
|
||||
}
|
||||
```
|
||||
|
||||
:::tip For plugins authors
|
||||
|
||||
Check the [dedicated issue](https://github.com/facebook/docusaurus/issues/10572) for guidelines and support.
|
||||
|
||||
:::
|
||||
|
||||
### Next Steps
|
||||
|
||||
It's only the beginning: we will continue working on the [Docusaurus Faster](https://github.com/facebook/docusaurus/issues/10556) project and already have a few more performance improvements planned.
|
||||
|
||||
Depending on [your feedback](https://github.com/facebook/docusaurus/issues/10556), we plan to make this new infrastructure the default in an upcoming major version of Docusaurus.
|
||||
|
||||
🙏 We'd like to thank the authors of all these great tools that already helped us make Docusaurus much faster than before. In particular the [Rspack team](https://rspack.dev/misc/team/core-team) that supported us along the way, handled our feedback very quickly and implemented all the missing features we needed to make it happen. 👏
|
||||
|
||||
## Rsdoctor plugin
|
||||
|
||||
In [#10588](https://github.com/facebook/docusaurus/pull/10588), we created a Docusaurus plugin for [Rsdoctor](https://rsdoctor.dev/). It analyzes the bundling phase of Docusaurus and helps you figure out what slows down the bundler in terms of loaders, plugins and minimizers. It works for both webpack and Rspack.
|
||||
|
||||

|
||||
|
||||
To use it, install the new [`@docusaurus/plugin-rsdoctor`](/docs/api/plugins/@docusaurus/plugin-rsdoctor) package, and then use the plugin in your config:
|
||||
|
||||
```ts title="docusaurus.config.js"
|
||||
export default {
|
||||
plugins: [
|
||||
[
|
||||
'rsdoctor',
|
||||
{
|
||||
/* options */
|
||||
},
|
||||
],
|
||||
],
|
||||
};
|
||||
```
|
||||
|
||||
:::tip
|
||||
|
||||
Turn it on conditionally, based on an environment variable:
|
||||
|
||||
```ts title="docusaurus.config.js"
|
||||
export default {
|
||||
plugins: [
|
||||
process.env.RSDOCTOR === 'true' && [
|
||||
'rsdoctor',
|
||||
{
|
||||
/* options */
|
||||
},
|
||||
],
|
||||
],
|
||||
};
|
||||
```
|
||||
|
||||
```bash
|
||||
# Build without Rsdoctor
|
||||
npm run build
|
||||
|
||||
# Build with Rsdoctor
|
||||
RSDOCTOR=true npm run build
|
||||
```
|
||||
|
||||
:::
|
||||
|
||||
## Mermaid
|
||||
|
||||
In [#10510](https://github.com/facebook/docusaurus/pull/10510), we relaxed our [Mermaid diagrams](https://mermaid.js.org/) dependency range to allow newer major versions of Mermaid. We now support both Mermaid 10/11, and expect upcoming versions to be compatible, letting you upgrade on your own terms.
|
||||
|
||||
This unlocks new types of diagrams, such as [Architecture Diagrams](https://mermaid.js.org/syntax/architecture):
|
||||
|
||||
```mermaid
|
||||
architecture-beta
|
||||
group api(cloud)[API]
|
||||
|
||||
service db(database)[Database] in api
|
||||
service disk1(disk)[Storage] in api
|
||||
service disk2(disk)[Storage] in api
|
||||
service server(server)[Server] in api
|
||||
|
||||
db:L -- R:server
|
||||
disk1:T -- B:server
|
||||
disk2:T -- B:db
|
||||
```
|
||||
|
||||
## Translations
|
||||
|
||||
- 🇸🇮 [#10551](https://github.com/facebook/docusaurus/pull/10551): Improve Slovenian theme translations.
|
||||
- 🇻🇳 [#10507](https://github.com/facebook/docusaurus/pull/10507): Improve Vietnamese theme translations.
|
||||
- 🇪🇸 [#10413](https://github.com/facebook/docusaurus/pull/10413): Improve Spanish theme translations.
|
||||
|
||||
## Other changes
|
||||
|
||||
Other notable changes include:
|
||||
|
||||
- [#10586](https://github.com/facebook/docusaurus/pull/10586): Blog support for `frontMatter.title_meta` to override `frontMatter.title` for SEO reason.
|
||||
- [#10600](https://github.com/facebook/docusaurus/pull/10600): `docusaurus build` and `docusaurus deploy` now support multiple `--locale` CLI args.
|
||||
- [#10454](https://github.com/facebook/docusaurus/pull/10454): `docusaurus-remark-plugin-npm2yarn` upgrades to [`npm-to-yarn` v3](https://github.com/nebrelbug/npm-to-yarn/releases/tag/v3.0.0) and can convert `npx` commands.
|
||||
- [#10612](https://github.com/facebook/docusaurus/pull/10612): Canary releases will use `3.5.2-canary-<number>` instead of `0.0.0-canary-<number>` to respect plugins `peerDependency` constraints.
|
||||
- [#10547](https://github.com/facebook/docusaurus/pull/10547): `@docusaurus/tsconfig` upgrades to `target: 'es2022'`.
|
||||
- [#10514](https://github.com/facebook/docusaurus/pull/10514): Remove `babel.config.js` from Docusaurus init templates to discourage customizing Babel.
|
||||
|
||||
Check the **[3.6.0 changelog entry](/changelog/3.6.0)** for an exhaustive list of changes.
|
Loading…
Add table
Add a link
Reference in a new issue