From 1ab77c8a55c86c79e4afd413e28982dc94356059 Mon Sep 17 00:00:00 2001 From: Colum Ferry Date: Wed, 21 May 2025 14:34:40 +0100 Subject: [PATCH] fix(module-federation): use runtimeChunk false when not in dev mode (#31256) ## Current Behavior In #30637 `runtimeChunk: false` was removed to allow HMR for styles. ## Expected Behavior We need to set runtimeChunk to false or multiple when working with MF. https://github.com/nrwl/nx/issues/31114#issuecomment-2881996043 ## Related Issue(s) Fixes #31114 --- .../angular/with-module-federation-ssr.ts | 4 ++++ .../with-module-federation/angular/with-module-federation.ts | 4 ++++ .../rspack/with-module-federation-ssr.ts | 4 ++++ .../with-module-federation/rspack/with-module-federation.ts | 4 ++++ .../webpack/with-module-federation-ssr.ts | 4 ++++ .../with-module-federation/webpack/with-module-federation.ts | 4 ++++ packages/rspack/src/plugins/utils/apply-base-config.ts | 4 ++++ 7 files changed, 28 insertions(+) diff --git a/packages/module-federation/src/with-module-federation/angular/with-module-federation-ssr.ts b/packages/module-federation/src/with-module-federation/angular/with-module-federation-ssr.ts index 9ae9d30d24..1a118c794b 100644 --- a/packages/module-federation/src/with-module-federation/angular/with-module-federation-ssr.ts +++ b/packages/module-federation/src/with-module-federation/angular/with-module-federation-ssr.ts @@ -11,6 +11,7 @@ export async function withModuleFederationForSSR( if (global.NX_GRAPH_CREATION) { return (config) => config; } + const isDevServer = process.env['WEBPACK_SERVE']; const { sharedLibraries, sharedDependencies, mappedRemotes } = await getModuleFederationConfig(options, { @@ -27,6 +28,9 @@ export async function withModuleFederationForSSR( }, optimization: { ...(config.optimization ?? {}), + runtimeChunk: isDevServer + ? config.optimization?.runtimeChunk ?? undefined + : false, }, resolve: { ...(config.resolve ?? {}), diff --git a/packages/module-federation/src/with-module-federation/angular/with-module-federation.ts b/packages/module-federation/src/with-module-federation/angular/with-module-federation.ts index 8d13e209c2..2d9aac3179 100644 --- a/packages/module-federation/src/with-module-federation/angular/with-module-federation.ts +++ b/packages/module-federation/src/with-module-federation/angular/with-module-federation.ts @@ -12,6 +12,7 @@ export async function withModuleFederation( if (global.NX_GRAPH_CREATION) { return (config) => config; } + const isDevServer = process.env['WEBPACK_SERVE']; const { sharedLibraries, sharedDependencies, mappedRemotes } = await getModuleFederationConfig(options); @@ -26,6 +27,9 @@ export async function withModuleFederation( }, optimization: { ...(config.optimization ?? {}), + runtimeChunk: isDevServer + ? config.optimization?.runtimeChunk ?? undefined + : false, }, resolve: { ...(config.resolve ?? {}), diff --git a/packages/module-federation/src/with-module-federation/rspack/with-module-federation-ssr.ts b/packages/module-federation/src/with-module-federation/rspack/with-module-federation-ssr.ts index b751d91286..12370ccc5c 100644 --- a/packages/module-federation/src/with-module-federation/rspack/with-module-federation-ssr.ts +++ b/packages/module-federation/src/with-module-federation/rspack/with-module-federation-ssr.ts @@ -12,6 +12,7 @@ export async function withModuleFederationForSSR( if (global.NX_GRAPH_CREATION) { return (config) => config; } + const isDevServer = process.env['WEBPACK_SERVE']; const { sharedLibraries, sharedDependencies, mappedRemotes } = getModuleFederationConfig(options, { @@ -26,6 +27,9 @@ export async function withModuleFederationForSSR( }; config.optimization = { ...(config.optimization ?? {}), + runtimeChunk: isDevServer + ? config.optimization?.runtimeChunk ?? undefined + : false, }; config.plugins.push( diff --git a/packages/module-federation/src/with-module-federation/rspack/with-module-federation.ts b/packages/module-federation/src/with-module-federation/rspack/with-module-federation.ts index f03850ce59..df5d8b100a 100644 --- a/packages/module-federation/src/with-module-federation/rspack/with-module-federation.ts +++ b/packages/module-federation/src/with-module-federation/rspack/with-module-federation.ts @@ -24,6 +24,7 @@ export async function withModuleFederation( return config; }; } + const isDevServer = process.env['WEBPACK_SERVE']; const { sharedDependencies, sharedLibraries, mappedRemotes } = getModuleFederationConfig(options); @@ -42,6 +43,9 @@ export async function withModuleFederation( config.optimization = { ...(config.optimization ?? {}), + runtimeChunk: isDevServer + ? config.optimization?.runtimeChunk ?? undefined + : false, }; if ( diff --git a/packages/module-federation/src/with-module-federation/webpack/with-module-federation-ssr.ts b/packages/module-federation/src/with-module-federation/webpack/with-module-federation-ssr.ts index 39053fe59b..354f420813 100644 --- a/packages/module-federation/src/with-module-federation/webpack/with-module-federation-ssr.ts +++ b/packages/module-federation/src/with-module-federation/webpack/with-module-federation-ssr.ts @@ -12,6 +12,7 @@ export async function withModuleFederationForSSR( if (global.NX_GRAPH_CREATION) { return (config) => config; } + const isDevServer = process.env['WEBPACK_SERVE']; const { sharedLibraries, sharedDependencies, mappedRemotes } = await getModuleFederationConfig(options, { @@ -23,6 +24,9 @@ export async function withModuleFederationForSSR( config.output.uniqueName = options.name; config.optimization = { ...(config.optimization ?? {}), + runtimeChunk: isDevServer + ? config.optimization?.runtimeChunk ?? undefined + : false, }; config.plugins.push( diff --git a/packages/module-federation/src/with-module-federation/webpack/with-module-federation.ts b/packages/module-federation/src/with-module-federation/webpack/with-module-federation.ts index a5f8af2bde..f7d2471ef0 100644 --- a/packages/module-federation/src/with-module-federation/webpack/with-module-federation.ts +++ b/packages/module-federation/src/with-module-federation/webpack/with-module-federation.ts @@ -16,6 +16,7 @@ export async function withModuleFederation( if (global.NX_GRAPH_CREATION) { return (config) => config; } + const isDevServer = process.env['WEBPACK_SERVE']; const { sharedDependencies, sharedLibraries, mappedRemotes } = await getModuleFederationConfig(options); @@ -27,6 +28,9 @@ export async function withModuleFederation( config.output.scriptType = 'text/javascript'; config.optimization = { ...(config.optimization ?? {}), + runtimeChunk: isDevServer + ? config.optimization?.runtimeChunk ?? undefined + : false, }; if ( diff --git a/packages/rspack/src/plugins/utils/apply-base-config.ts b/packages/rspack/src/plugins/utils/apply-base-config.ts index 479875fdda..cb4876ef87 100644 --- a/packages/rspack/src/plugins/utils/apply-base-config.ts +++ b/packages/rspack/src/plugins/utils/apply-base-config.ts @@ -64,6 +64,7 @@ function applyNxIndependentConfig( ): void { const isProd = process.env.NODE_ENV === 'production' || options.mode === 'production'; + const isDevServer = process.env['WEBPACK_SERVE']; const hashFormat = getOutputHashFormat(options.outputHashing as string); config.context = path.join(options.root, options.projectRoot); config.target ??= options.target as 'async-node' | 'node' | 'web'; @@ -178,6 +179,9 @@ function applyNxIndependentConfig( }), ], concatenateModules: true, + runtimeChunk: isDevServer + ? config.optimization?.runtimeChunk ?? undefined + : false, }; config.stats = {