mirror of
https://github.com/facebook/docusaurus.git
synced 2025-12-26 01:33:02 +00:00
fix(faster): fix server build SWC / browserslist node target (#11496)
Some checks failed
Argos CI / take-screenshots (push) Has been cancelled
Build Hash Router / Build Hash Router (push) Has been cancelled
Canary Release / Publish Canary (push) Has been cancelled
CodeQL / Analyze (javascript) (push) Has been cancelled
Continuous Releases / Continuous Releases (push) Has been cancelled
E2E Tests / E2E — Yarn v1 (20) (push) Has been cancelled
E2E Tests / E2E — Yarn v1 (20.0) (push) Has been cancelled
E2E Tests / E2E — Yarn v1 (22) (push) Has been cancelled
E2E Tests / E2E — Yarn v1 (24) (push) Has been cancelled
E2E Tests / E2E — Yarn v1 (25) (push) Has been cancelled
E2E Tests / E2E — Yarn v1 Windows (push) Has been cancelled
E2E Tests / E2E — Yarn Berry (node-modules, -s) (push) Has been cancelled
E2E Tests / E2E — Yarn Berry (node-modules, -st) (push) Has been cancelled
E2E Tests / E2E — Yarn Berry (pnp, -s) (push) Has been cancelled
E2E Tests / E2E — Yarn Berry (pnp, -st) (push) Has been cancelled
E2E Tests / E2E — npm (push) Has been cancelled
E2E Tests / E2E — pnpm (push) Has been cancelled
Some checks failed
Argos CI / take-screenshots (push) Has been cancelled
Build Hash Router / Build Hash Router (push) Has been cancelled
Canary Release / Publish Canary (push) Has been cancelled
CodeQL / Analyze (javascript) (push) Has been cancelled
Continuous Releases / Continuous Releases (push) Has been cancelled
E2E Tests / E2E — Yarn v1 (20) (push) Has been cancelled
E2E Tests / E2E — Yarn v1 (20.0) (push) Has been cancelled
E2E Tests / E2E — Yarn v1 (22) (push) Has been cancelled
E2E Tests / E2E — Yarn v1 (24) (push) Has been cancelled
E2E Tests / E2E — Yarn v1 (25) (push) Has been cancelled
E2E Tests / E2E — Yarn v1 Windows (push) Has been cancelled
E2E Tests / E2E — Yarn Berry (node-modules, -s) (push) Has been cancelled
E2E Tests / E2E — Yarn Berry (node-modules, -st) (push) Has been cancelled
E2E Tests / E2E — Yarn Berry (pnp, -s) (push) Has been cancelled
E2E Tests / E2E — Yarn Berry (pnp, -st) (push) Has been cancelled
E2E Tests / E2E — npm (push) Has been cancelled
E2E Tests / E2E — pnpm (push) Has been cancelled
This commit is contained in:
parent
e133e8d6d2
commit
0372ecd1e9
|
|
@ -28,7 +28,7 @@ async function createSwcJsLoaderFactory(): Promise<
|
||||||
return ({isServer}) => {
|
return ({isServer}) => {
|
||||||
return {
|
return {
|
||||||
loader,
|
loader,
|
||||||
options: getOptions({isServer}),
|
options: getOptions({isServer, bundlerName: 'webpack'}),
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
@ -42,7 +42,7 @@ async function createRspackSwcJsLoaderFactory(): Promise<
|
||||||
return ({isServer}) => {
|
return ({isServer}) => {
|
||||||
return {
|
return {
|
||||||
loader,
|
loader,
|
||||||
options: getOptions({isServer}),
|
options: getOptions({isServer, bundlerName: 'rspack'}),
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -142,7 +142,10 @@ async function getRspackMinimizers({
|
||||||
}: MinimizersConfig): Promise<WebpackPluginInstance[]> {
|
}: MinimizersConfig): Promise<WebpackPluginInstance[]> {
|
||||||
const rspack = getCurrentBundlerAsRspack({currentBundler});
|
const rspack = getCurrentBundlerAsRspack({currentBundler});
|
||||||
const getBrowserslistQueries = await importGetBrowserslistQueries();
|
const getBrowserslistQueries = await importGetBrowserslistQueries();
|
||||||
const browserslistQueries = getBrowserslistQueries({isServer: false});
|
const browserslistQueries = getBrowserslistQueries({
|
||||||
|
isServer: false,
|
||||||
|
bundlerName: 'rspack',
|
||||||
|
});
|
||||||
const swcJsMinimizerOptions = await importSwcJsMinimizerOptions();
|
const swcJsMinimizerOptions = await importSwcJsMinimizerOptions();
|
||||||
return [
|
return [
|
||||||
// See https://rspack.dev/plugins/rspack/swc-js-minimizer-rspack-plugin
|
// See https://rspack.dev/plugins/rspack/swc-js-minimizer-rspack-plugin
|
||||||
|
|
|
||||||
|
|
@ -24,6 +24,7 @@
|
||||||
"@swc/html": "^1.13.5",
|
"@swc/html": "^1.13.5",
|
||||||
"browserslist": "^4.24.2",
|
"browserslist": "^4.24.2",
|
||||||
"lightningcss": "^1.27.0",
|
"lightningcss": "^1.27.0",
|
||||||
|
"semver": "^7.5.4",
|
||||||
"swc-loader": "^0.2.6",
|
"swc-loader": "^0.2.6",
|
||||||
"tslib": "^2.6.0",
|
"tslib": "^2.6.0",
|
||||||
"webpack": "^5.95.0"
|
"webpack": "^5.95.0"
|
||||||
|
|
|
||||||
|
|
@ -9,18 +9,22 @@ import Rspack from '@rspack/core';
|
||||||
import * as lightningcss from 'lightningcss';
|
import * as lightningcss from 'lightningcss';
|
||||||
import browserslist from 'browserslist';
|
import browserslist from 'browserslist';
|
||||||
import {minify as swcHtmlMinifier} from '@swc/html';
|
import {minify as swcHtmlMinifier} from '@swc/html';
|
||||||
|
import semver from 'semver';
|
||||||
import type {JsMinifyOptions, Options as SwcOptions} from '@swc/core';
|
import type {JsMinifyOptions, Options as SwcOptions} from '@swc/core';
|
||||||
|
import type {CurrentBundler} from '@docusaurus/types';
|
||||||
|
|
||||||
export const swcLoader = require.resolve('swc-loader');
|
export const swcLoader = require.resolve('swc-loader');
|
||||||
|
|
||||||
export const getSwcLoaderOptions = ({
|
export const getSwcLoaderOptions = ({
|
||||||
isServer,
|
isServer,
|
||||||
|
bundlerName,
|
||||||
}: {
|
}: {
|
||||||
isServer: boolean;
|
isServer: boolean;
|
||||||
|
bundlerName: CurrentBundler['name'];
|
||||||
}): SwcOptions => {
|
}): SwcOptions => {
|
||||||
return {
|
return {
|
||||||
env: {
|
env: {
|
||||||
targets: getBrowserslistQueries({isServer}),
|
targets: getBrowserslistQueries({isServer, bundlerName}),
|
||||||
},
|
},
|
||||||
jsc: {
|
jsc: {
|
||||||
parser: {
|
parser: {
|
||||||
|
|
@ -63,20 +67,53 @@ 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 ', '')
|
||||||
|
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
|
// We need this because of Rspack built-in LightningCSS integration
|
||||||
// See https://github.com/orgs/browserslist/discussions/846
|
// See https://github.com/orgs/browserslist/discussions/846
|
||||||
export function getBrowserslistQueries({
|
export function getBrowserslistQueries({
|
||||||
isServer,
|
isServer,
|
||||||
|
bundlerName,
|
||||||
}: {
|
}: {
|
||||||
isServer: boolean;
|
isServer: boolean;
|
||||||
|
bundlerName: CurrentBundler['name'];
|
||||||
}): string[] {
|
}): string[] {
|
||||||
if (isServer) {
|
if (isServer) {
|
||||||
return [`node ${process.versions.node}`];
|
// 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}`];
|
||||||
}
|
}
|
||||||
|
|
||||||
const queries = browserslist.loadConfig({path: process.cwd()}) ?? [
|
const queries = browserslist.loadConfig({path: process.cwd()}) ?? [
|
||||||
...browserslist.defaults,
|
...browserslist.defaults,
|
||||||
];
|
];
|
||||||
|
|
||||||
return queries;
|
return queries;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -49,18 +49,6 @@ export default async function themeMermaid(): Promise<Plugin<void>> {
|
||||||
),
|
),
|
||||||
}),
|
}),
|
||||||
],
|
],
|
||||||
|
|
||||||
// Workaround for weird Rspack/SWC issue
|
|
||||||
// See https://github.com/facebook/docusaurus/issues/11430
|
|
||||||
resolve: {
|
|
||||||
alias: {
|
|
||||||
...(elkLayoutEnabled
|
|
||||||
? {}
|
|
||||||
: {
|
|
||||||
'@mermaid-js/layout-elk': false,
|
|
||||||
}),
|
|
||||||
},
|
|
||||||
},
|
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue