From 2f2ba580e8c03e6b9db8786035e3efd7ec767b76 Mon Sep 17 00:00:00 2001 From: sebastien Date: Fri, 17 Oct 2025 19:10:33 +0200 Subject: [PATCH 1/4] Improve node SWC / browserslist target --- packages/docusaurus-faster/package.json | 1 + packages/docusaurus-faster/src/index.ts | 25 ++++++++++++++++++++++++- 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/packages/docusaurus-faster/package.json b/packages/docusaurus-faster/package.json index 704b4f08a6a2..23c119d216ab 100644 --- a/packages/docusaurus-faster/package.json +++ b/packages/docusaurus-faster/package.json @@ -24,6 +24,7 @@ "@swc/html": "^1.13.5", "browserslist": "^4.24.2", "lightningcss": "^1.27.0", + "semver": "^7.5.4", "swc-loader": "^0.2.6", "tslib": "^2.6.0", "webpack": "^5.95.0" diff --git a/packages/docusaurus-faster/src/index.ts b/packages/docusaurus-faster/src/index.ts index cba2c68730f2..fb2b6d753848 100644 --- a/packages/docusaurus-faster/src/index.ts +++ b/packages/docusaurus-faster/src/index.ts @@ -9,6 +9,7 @@ import Rspack from '@rspack/core'; import * as lightningcss from 'lightningcss'; import browserslist from 'browserslist'; import {minify as swcHtmlMinifier} from '@swc/html'; +import semver from 'semver'; import type {JsMinifyOptions, Options as SwcOptions} from '@swc/core'; export const swcLoader = require.resolve('swc-loader'); @@ -63,6 +64,17 @@ export function getSwcJsMinimizerOptions(): JsMinifyOptions { }; } +// TODO this is not accurate +// for Rspack we should read from the built-in browserslist data +function getLastBrowserslistKnownNodeVersion(): string { + // browserslist('last 1 node versions')[0]!.replace('node ', '') + return browserslist.nodeVersions.at(-1)!; +} + +function getMinVersion(v1: string, v2: string): string { + return semver.lt(v1, v2) ? v1 : v2; +} + // We need this because of Rspack built-in LightningCSS integration // See https://github.com/orgs/browserslist/discussions/846 export function getBrowserslistQueries({ @@ -71,12 +83,23 @@ export function getBrowserslistQueries({ isServer: boolean; }): string[] { if (isServer) { - return [`node ${process.versions.node}`]; + const nodeTarget = + // Escape hatch env variable + process.env.DOCUSAURUS_SERVER_NODE_TARGET ?? + // For server builds, we want to use the current Node version as target + // But we can't pass a target that Browserslist doesn't know about yet + getMinVersion( + process.versions.node, + getLastBrowserslistKnownNodeVersion(), + ); + + return [`node ${nodeTarget}`]; } const queries = browserslist.loadConfig({path: process.cwd()}) ?? [ ...browserslist.defaults, ]; + return queries; } From 3ead02cb641c572a0c2b5ffeb55a4188188b2e4d Mon Sep 17 00:00:00 2001 From: sebastien Date: Fri, 17 Oct 2025 19:21:11 +0200 Subject: [PATCH 2/4] Improve node SWC / browserslist target --- .../src/loaders/jsLoader.ts | 4 +-- .../docusaurus-bundler/src/minification.ts | 5 ++- packages/docusaurus-faster/src/index.ts | 34 +++++++++++++------ 3 files changed, 29 insertions(+), 14 deletions(-) diff --git a/packages/docusaurus-bundler/src/loaders/jsLoader.ts b/packages/docusaurus-bundler/src/loaders/jsLoader.ts index 6f9213454d5d..51d749ce640a 100644 --- a/packages/docusaurus-bundler/src/loaders/jsLoader.ts +++ b/packages/docusaurus-bundler/src/loaders/jsLoader.ts @@ -28,7 +28,7 @@ async function createSwcJsLoaderFactory(): Promise< return ({isServer}) => { return { loader, - options: getOptions({isServer}), + options: getOptions({isServer, bundlerName: 'webpack'}), }; }; } @@ -42,7 +42,7 @@ async function createRspackSwcJsLoaderFactory(): Promise< return ({isServer}) => { return { loader, - options: getOptions({isServer}), + options: getOptions({isServer, bundlerName: 'rspack'}), }; }; } diff --git a/packages/docusaurus-bundler/src/minification.ts b/packages/docusaurus-bundler/src/minification.ts index 0c4d2d8ddee5..a06b81c98804 100644 --- a/packages/docusaurus-bundler/src/minification.ts +++ b/packages/docusaurus-bundler/src/minification.ts @@ -142,7 +142,10 @@ async function getRspackMinimizers({ }: MinimizersConfig): Promise { const rspack = getCurrentBundlerAsRspack({currentBundler}); const getBrowserslistQueries = await importGetBrowserslistQueries(); - const browserslistQueries = getBrowserslistQueries({isServer: false}); + const browserslistQueries = getBrowserslistQueries({ + isServer: false, + bundlerName: 'rspack', + }); const swcJsMinimizerOptions = await importSwcJsMinimizerOptions(); return [ // See https://rspack.dev/plugins/rspack/swc-js-minimizer-rspack-plugin diff --git a/packages/docusaurus-faster/src/index.ts b/packages/docusaurus-faster/src/index.ts index fb2b6d753848..d28016032841 100644 --- a/packages/docusaurus-faster/src/index.ts +++ b/packages/docusaurus-faster/src/index.ts @@ -11,17 +11,20 @@ import browserslist from 'browserslist'; import {minify as swcHtmlMinifier} from '@swc/html'; import semver from 'semver'; import type {JsMinifyOptions, Options as SwcOptions} from '@swc/core'; +import type {CurrentBundler} from '@docusaurus/types'; export const swcLoader = require.resolve('swc-loader'); export const getSwcLoaderOptions = ({ isServer, + bundlerName, }: { isServer: boolean; + bundlerName: CurrentBundler['name']; }): SwcOptions => { return { env: { - targets: getBrowserslistQueries({isServer}), + targets: getBrowserslistQueries({isServer, bundlerName}), }, jsc: { parser: { @@ -66,7 +69,13 @@ export function getSwcJsMinimizerOptions(): JsMinifyOptions { // TODO this is not accurate // for Rspack we should read from the built-in browserslist data -function getLastBrowserslistKnownNodeVersion(): string { +function getLastBrowserslistKnownNodeVersion( + bundlerName: CurrentBundler['name'], +): string { + if (bundlerName === 'rspack') { + // TODO hardcoded value until Rspack exposes its Browserslist data + return '22.0.0'; + } // browserslist('last 1 node versions')[0]!.replace('node ', '') return browserslist.nodeVersions.at(-1)!; } @@ -79,19 +88,22 @@ function getMinVersion(v1: string, v2: string): string { // See https://github.com/orgs/browserslist/discussions/846 export function getBrowserslistQueries({ isServer, + bundlerName, }: { isServer: boolean; + bundlerName: CurrentBundler['name']; }): string[] { if (isServer) { - const nodeTarget = - // Escape hatch env variable - process.env.DOCUSAURUS_SERVER_NODE_TARGET ?? - // For server builds, we want to use the current Node version as target - // But we can't pass a target that Browserslist doesn't know about yet - getMinVersion( - process.versions.node, - getLastBrowserslistKnownNodeVersion(), - ); + // Escape hatch env variable + if (process.env.DOCUSAURUS_SERVER_NODE_TARGET) { + return [`node ${process.env.DOCUSAURUS_SERVER_NODE_TARGET}`]; + } + // For server builds, we want to use the current Node version as target + // But we can't pass a target that Browserslist doesn't know about yet + const nodeTarget = getMinVersion( + process.versions.node, + getLastBrowserslistKnownNodeVersion(bundlerName), + ); return [`node ${nodeTarget}`]; } From fc44599c0897a2a60721e8f228fbe6e7e1c492da Mon Sep 17 00:00:00 2001 From: sebastien Date: Fri, 17 Oct 2025 20:11:19 +0200 Subject: [PATCH 3/4] remove now useless Rspack fix for Mermaid ELK layout --- packages/docusaurus-theme-mermaid/src/index.ts | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/packages/docusaurus-theme-mermaid/src/index.ts b/packages/docusaurus-theme-mermaid/src/index.ts index 288000902be4..622c6b2ef72b 100644 --- a/packages/docusaurus-theme-mermaid/src/index.ts +++ b/packages/docusaurus-theme-mermaid/src/index.ts @@ -49,18 +49,6 @@ export default async function themeMermaid(): Promise> { ), }), ], - - // Workaround for weird Rspack/SWC issue - // See https://github.com/facebook/docusaurus/issues/11430 - resolve: { - alias: { - ...(elkLayoutEnabled - ? {} - : { - '@mermaid-js/layout-elk': false, - }), - }, - }, }; }, }; From e07432f7ac95af0c44c80ac6d85830235ee7a648 Mon Sep 17 00:00:00 2001 From: sebastien Date: Fri, 17 Oct 2025 20:15:10 +0200 Subject: [PATCH 4/4] Add PR refs in comments --- packages/docusaurus-faster/src/index.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/docusaurus-faster/src/index.ts b/packages/docusaurus-faster/src/index.ts index d28016032841..27cc387a7ad4 100644 --- a/packages/docusaurus-faster/src/index.ts +++ b/packages/docusaurus-faster/src/index.ts @@ -69,11 +69,13 @@ export function getSwcJsMinimizerOptions(): JsMinifyOptions { // TODO this is not accurate // for Rspack we should read from the built-in browserslist data +// see https://github.com/facebook/docusaurus/pull/11496 function getLastBrowserslistKnownNodeVersion( bundlerName: CurrentBundler['name'], ): string { if (bundlerName === 'rspack') { // TODO hardcoded value until Rspack exposes its Browserslist data + // see https://github.com/facebook/docusaurus/pull/11496 return '22.0.0'; } // browserslist('last 1 node versions')[0]!.replace('node ', '')