Improve node SWC / browserslist target

This commit is contained in:
sebastien 2025-10-17 19:10:33 +02:00
parent 5e846f6496
commit 2f2ba580e8
2 changed files with 25 additions and 1 deletions

View File

@ -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"

View File

@ -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;
}