From 08a776ac102da8c51758770ac675eb0d3c6c05e3 Mon Sep 17 00:00:00 2001 From: 2heal1 Date: Tue, 24 Jun 2025 11:04:49 +0800 Subject: [PATCH 1/2] fix(modern-js-plugin): use contenthash instead of chunkhash --- .changeset/sour-dragons-hang.md | 6 ++++++ packages/modernjs/src/cli/configPlugin.ts | 2 +- packages/rsbuild-plugin/src/cli/ssr.spec.ts | 4 ++-- packages/rsbuild-plugin/src/cli/ssr.ts | 2 +- 4 files changed, 10 insertions(+), 4 deletions(-) create mode 100644 .changeset/sour-dragons-hang.md diff --git a/.changeset/sour-dragons-hang.md b/.changeset/sour-dragons-hang.md new file mode 100644 index 0000000000..df66bb7be4 --- /dev/null +++ b/.changeset/sour-dragons-hang.md @@ -0,0 +1,6 @@ +--- +'@module-federation/rsbuild-plugin': patch +'@module-federation/modern-js': patch +--- + +fix(modern-js-plugin): use contenthash instead of chunkhash diff --git a/packages/modernjs/src/cli/configPlugin.ts b/packages/modernjs/src/cli/configPlugin.ts index f6ffb0bdec..bd628a26e1 100644 --- a/packages/modernjs/src/cli/configPlugin.ts +++ b/packages/modernjs/src/cli/configPlugin.ts @@ -353,7 +353,7 @@ export function patchBundlerConfig(options: { uniqueName && !chunkFileName.includes(uniqueName) ) { - const suffix = `${encodeName(uniqueName)}-[chunkhash].js`; + const suffix = `${encodeName(uniqueName)}-[contenthash].js`; chain.output.chunkFilename(chunkFileName.replace('.js', suffix)); } } diff --git a/packages/rsbuild-plugin/src/cli/ssr.spec.ts b/packages/rsbuild-plugin/src/cli/ssr.spec.ts index 2a399461e4..d67cf4f939 100644 --- a/packages/rsbuild-plugin/src/cli/ssr.spec.ts +++ b/packages/rsbuild-plugin/src/cli/ssr.spec.ts @@ -138,7 +138,7 @@ describe('patchSSRRspackConfig', () => { }; const patchedConfig = patchSSRRspackConfig(config, mfConfig); expect(patchedConfig.output?.chunkFilename).toBe( - 'js/[name]myApp-[chunkhash].js', + 'js/[name]myApp-[contenthash].js', ); }); @@ -154,7 +154,7 @@ describe('patchSSRRspackConfig', () => { const mfConfig: moduleFederationPlugin.ModuleFederationPluginOptions = {}; // No name in mfConfig const patchedConfig = patchSSRRspackConfig(config, mfConfig); expect(patchedConfig.output?.chunkFilename).toBe( - 'js/[name]myOutputUniqueName-[chunkhash].js', + 'js/[name]myOutputUniqueName-[contenthash].js', ); }); diff --git a/packages/rsbuild-plugin/src/cli/ssr.ts b/packages/rsbuild-plugin/src/cli/ssr.ts index 54859e125f..6cc77297b2 100644 --- a/packages/rsbuild-plugin/src/cli/ssr.ts +++ b/packages/rsbuild-plugin/src/cli/ssr.ts @@ -41,7 +41,7 @@ export function patchSSRRspackConfig( uniqueName && !chunkFileName.includes(uniqueName) ) { - const suffix = `${encodeName(uniqueName)}-[chunkhash].js`; + const suffix = `${encodeName(uniqueName)}-[contenthash].js`; config.output.chunkFilename = chunkFileName.replace('.js', suffix); } From e8fc494f5b79b88527fd7c6b13b70f405a10df5a Mon Sep 17 00:00:00 2001 From: 2heal1 Date: Tue, 24 Jun 2025 14:23:02 +0800 Subject: [PATCH 2/2] fix(node): use contenthash instead of chunkhash --- .changeset/ninety-points-impress.md | 6 ++++++ apps/node-host/webpack.config.js | 2 +- .../plugins/NextFederationPlugin/apply-server-plugins.ts | 2 +- packages/node/README.md | 2 +- packages/node/src/plugins/NodeFederationPlugin.ts | 2 +- packages/node/src/plugins/UniversalFederationPlugin.ts | 2 +- 6 files changed, 11 insertions(+), 5 deletions(-) create mode 100644 .changeset/ninety-points-impress.md diff --git a/.changeset/ninety-points-impress.md b/.changeset/ninety-points-impress.md new file mode 100644 index 0000000000..116fb80773 --- /dev/null +++ b/.changeset/ninety-points-impress.md @@ -0,0 +1,6 @@ +--- +'@module-federation/nextjs-mf': patch +'@module-federation/node': patch +--- + +fix(node): use contenthash instead of chunkhash diff --git a/apps/node-host/webpack.config.js b/apps/node-host/webpack.config.js index 77626757c5..4a4032c653 100644 --- a/apps/node-host/webpack.config.js +++ b/apps/node-host/webpack.config.js @@ -9,7 +9,7 @@ module.exports = composePlugins(withNx(), async (config) => { config.devtool = false; config.target = 'async-node'; config.output.publicPath = '/testing'; - config.output.chunkFilename = '[id]-[chunkhash].js'; + config.output.chunkFilename = '[id]-[contenthash].js'; config.optimization.chunkIds = 'named'; await new Promise((r) => setTimeout(r, 400)); config.module.rules.pop(); diff --git a/packages/nextjs-mf/src/plugins/NextFederationPlugin/apply-server-plugins.ts b/packages/nextjs-mf/src/plugins/NextFederationPlugin/apply-server-plugins.ts index a61a193fa1..be860298c5 100644 --- a/packages/nextjs-mf/src/plugins/NextFederationPlugin/apply-server-plugins.ts +++ b/packages/nextjs-mf/src/plugins/NextFederationPlugin/apply-server-plugins.ts @@ -62,7 +62,7 @@ export function applyServerPlugins( ): void { const chunkFileName = compiler.options?.output?.chunkFilename; const uniqueName = compiler?.options?.output?.uniqueName || options.name; - const suffix = `-[chunkhash].js`; + const suffix = `-[contenthash].js`; // Modify chunk filename to include a unique suffix if not already present if ( diff --git a/packages/node/README.md b/packages/node/README.md index 69f9901714..10f8d78cc7 100644 --- a/packages/node/README.md +++ b/packages/node/README.md @@ -46,7 +46,7 @@ const { ModuleFederationPlugin } = require('@module-federation/enhanced'); const options = { target: 'async-node', output: { - chunkFilename: '[id]-[chunkhash].js', // important to hash chunks + chunkFilename: '[id]-[contenthash].js', // important to hash chunks }, plugins: [ new ModuleFederationPlugin({ diff --git a/packages/node/src/plugins/NodeFederationPlugin.ts b/packages/node/src/plugins/NodeFederationPlugin.ts index c6856139d2..ddc78522a9 100644 --- a/packages/node/src/plugins/NodeFederationPlugin.ts +++ b/packages/node/src/plugins/NodeFederationPlugin.ts @@ -87,7 +87,7 @@ class NodeFederationPlugin { uniqueName && !chunkFileName.includes(uniqueName) ) { - const suffix = `-[chunkhash].js`; + const suffix = `-[contenthash].js`; compiler.options.output.chunkFilename = chunkFileName.replace( '.js', suffix, diff --git a/packages/node/src/plugins/UniversalFederationPlugin.ts b/packages/node/src/plugins/UniversalFederationPlugin.ts index ed9b402727..755a92e8e0 100644 --- a/packages/node/src/plugins/UniversalFederationPlugin.ts +++ b/packages/node/src/plugins/UniversalFederationPlugin.ts @@ -71,7 +71,7 @@ class UniversalFederationPlugin { uniqueName && !chunkFileName.includes(uniqueName) ) { - const suffix = `-[chunkhash].js`; + const suffix = `-[contenthash].js`; compiler.options.output.chunkFilename = chunkFileName.replace( '.js', suffix,