fix(webpack): migrate to latest version to prevent security vulnerabilities #29755 (#30590)

## Current Behavior
The `@nx/webpack` depends on `webpack` at version `^5.80.0`. Despite the
`^` allowing it to resolve to a higher minor, there has been no
migration to force users onto a higher version.
There is a security vulnerability with version `5.88.0`.

## Expected Behavior
Ensure users are migrated to a version where the security vulnerability
has been fixed.

## Related Issue(s)

Fixes #29755
This commit is contained in:
Colum Ferry 2025-04-02 17:32:24 +01:00 committed by GitHub
parent fd337bb5e3
commit 27b78cd7ae
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
11 changed files with 362 additions and 364 deletions

View File

@ -6107,6 +6107,16 @@
} }
}, },
"migrations": { "migrations": {
"/nx-api/webpack/migrations/20.7.1-package-updates": {
"description": "",
"file": "generated/packages/webpack/migrations/20.7.1-package-updates.json",
"hidden": false,
"name": "20.7.1-package-updates",
"version": "20.7.1-beta.0",
"originalFilePath": "/packages/webpack",
"path": "/nx-api/webpack/migrations/20.7.1-package-updates",
"type": "migration"
},
"/nx-api/webpack/migrations/20.5.0-package-updates": { "/nx-api/webpack/migrations/20.5.0-package-updates": {
"description": "", "description": "",
"file": "generated/packages/webpack/migrations/20.5.0-package-updates.json", "file": "generated/packages/webpack/migrations/20.5.0-package-updates.json",

View File

@ -6070,6 +6070,16 @@
} }
], ],
"migrations": [ "migrations": [
{
"description": "",
"file": "generated/packages/webpack/migrations/20.7.1-package-updates.json",
"hidden": false,
"name": "20.7.1-package-updates",
"version": "20.7.1-beta.0",
"originalFilePath": "/packages/webpack",
"path": "webpack/migrations/20.7.1-package-updates",
"type": "migration"
},
{ {
"description": "", "description": "",
"file": "generated/packages/webpack/migrations/20.5.0-package-updates.json", "file": "generated/packages/webpack/migrations/20.5.0-package-updates.json",

View File

@ -0,0 +1,18 @@
{
"name": "20.7.1-package-updates",
"version": "20.7.1-beta.0",
"packages": {
"webpack": { "version": "^5.98.0", "alwaysAddToPackageJson": false },
"webpack-dev-server": {
"version": "^5.2.1",
"alwaysAddToPackageJson": false
}
},
"aliases": [],
"description": "",
"hidden": false,
"implementation": "",
"path": "/packages/webpack",
"schema": null,
"type": "migration"
}

View File

@ -312,8 +312,8 @@
"verdaccio": "6.0.5", "verdaccio": "6.0.5",
"vite": "6.2.0", "vite": "6.2.0",
"vitest": "3.0.5", "vitest": "3.0.5",
"webpack": "5.88.0", "webpack": "5.98.0",
"webpack-dev-server": "5.0.4", "webpack-dev-server": "5.2.1",
"webpack-merge": "^5.8.0", "webpack-merge": "^5.8.0",
"webpack-node-externals": "^3.0.0", "webpack-node-externals": "^3.0.0",
"webpack-subresource-integrity": "^5.1.0", "webpack-subresource-integrity": "^5.1.0",

View File

@ -210,7 +210,6 @@ export function executeDevServerBuilder(
// This will occur when workspaceDependencies = [] // This will occur when workspaceDependencies = []
if (workspaceDependencies.length > 0) { if (workspaceDependencies.length > 0) {
baseWebpackConfig.plugins.push( baseWebpackConfig.plugins.push(
// @ts-expect-error - difference between angular and webpack plugin definitions bc of webpack versions
new WebpackNxBuildCoordinationPlugin( new WebpackNxBuildCoordinationPlugin(
`nx run-many --target=${ `nx run-many --target=${
parsedBuildTarget.target parsedBuildTarget.target

View File

@ -69,7 +69,11 @@ export function applyReactConfig(
function addHotReload( function addHotReload(
config: Partial<WebpackOptionsNormalized | Configuration> config: Partial<WebpackOptionsNormalized | Configuration>
) { ) {
if (config.mode === 'development' && config['devServer']?.hot) { if (
config.mode === 'development' &&
typeof config['devServer'] === 'object' &&
config['devServer']?.hot
) {
// add `react-refresh/babel` to babel loader plugin // add `react-refresh/babel` to babel loader plugin
const babelLoader = config.module.rules.find( const babelLoader = config.module.rules.find(
(rule) => (rule) =>

View File

@ -37,7 +37,6 @@ export function getDevServerOptions(
}, },
onListening(server) { onListening(server) {
const isHttps = const isHttps =
server.options.https ||
(server.options.server as { type: string })?.type === 'https'; (server.options.server as { type: string })?.type === 'https';
logger.info( logger.info(
`NX Web Development Server is listening at ${ `NX Web Development Server is listening at ${

View File

@ -44,6 +44,19 @@
"alwaysAddToPackageJson": false "alwaysAddToPackageJson": false
} }
} }
},
"20.7.1": {
"version": "20.7.1-beta.0",
"packages": {
"webpack": {
"version": "^5.98.0",
"alwaysAddToPackageJson": false
},
"webpack-dev-server": {
"version": "^5.2.1",
"alwaysAddToPackageJson": false
}
}
} }
} }
} }

View File

@ -62,8 +62,8 @@
"ts-loader": "^9.3.1", "ts-loader": "^9.3.1",
"tsconfig-paths-webpack-plugin": "4.0.0", "tsconfig-paths-webpack-plugin": "4.0.0",
"tslib": "^2.3.0", "tslib": "^2.3.0",
"webpack": "^5.80.0", "webpack": "^5.98.0",
"webpack-dev-server": "^5.0.4", "webpack-dev-server": "^5.2.1",
"webpack-node-externals": "^3.0.0", "webpack-node-externals": "^3.0.0",
"webpack-subresource-integrity": "^5.1.0", "webpack-subresource-integrity": "^5.1.0",
"@nx/devkit": "file:../devkit", "@nx/devkit": "file:../devkit",

View File

@ -213,7 +213,10 @@ function applyDefaults(
options: WebpackConfigDevServerOptions, options: WebpackConfigDevServerOptions,
buildOptions: any buildOptions: any
) { ) {
if (options.port === undefined) { if (!options) {
options = {};
}
if (options?.port === undefined) {
options.port = 4200; options.port = 4200;
} }

654
pnpm-lock.yaml generated

File diff suppressed because it is too large Load Diff