@module-federation/modern-js 0.0.0-next-20250219103339 → 0.0.0-next-20250220101307

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -135,20 +135,19 @@ const patchMFConfig = (mfConfig, isServer, remoteIpStrategy) => {
135
135
  mfConfig.dev = false;
136
136
  return mfConfig;
137
137
  };
138
- function patchIgnoreWarning(chain) {
139
- const ignoreWarnings = chain.get("ignoreWarnings") || [];
138
+ function patchIgnoreWarning(bundlerConfig) {
139
+ bundlerConfig.ignoreWarnings = bundlerConfig.ignoreWarnings || [];
140
140
  const ignoredMsgs = [
141
141
  "external script",
142
142
  "process.env.WS_NO_BUFFER_UTIL",
143
143
  `Can't resolve 'utf-8-validate`
144
144
  ];
145
- ignoreWarnings.push((warning) => {
145
+ bundlerConfig.ignoreWarnings.push((warning) => {
146
146
  if (ignoredMsgs.some((msg) => warning.message.includes(msg))) {
147
147
  return true;
148
148
  }
149
149
  return false;
150
150
  });
151
- chain.ignoreWarnings(ignoreWarnings);
152
151
  }
153
152
  function addMyTypes2Ignored(chain, mfConfig) {
154
153
  const watchOptions = chain.get("watchOptions");
@@ -187,43 +186,55 @@ function addMyTypes2Ignored(chain, mfConfig) {
187
186
  });
188
187
  }
189
188
  function patchBundlerConfig(options) {
190
- var _modernjsConfig_server, _modernjsConfig_deploy;
191
- const { chain, modernjsConfig, isServer, mfConfig } = options;
189
+ var _modernjsConfig_server, _bundlerConfig_optimization, _bundlerConfig_optimization1, _bundlerConfig_output, _modernjsConfig_deploy;
190
+ const { bundlerConfig, modernjsConfig, isServer, mfConfig, bundlerType } = options;
192
191
  const enableSSR = Boolean((_modernjsConfig_server = modernjsConfig.server) === null || _modernjsConfig_server === void 0 ? void 0 : _modernjsConfig_server.ssr);
193
- chain.optimization.delete("runtimeChunk");
194
- if (!chain.output.get("chunkLoadingGlobal")) {
195
- chain.output.chunkLoadingGlobal(`chunk_${mfConfig.name}`);
196
- }
197
- if (!chain.output.get("uniqueName")) {
198
- chain.output.uniqueName(mfConfig.name);
192
+ (_bundlerConfig_optimization = bundlerConfig.optimization) === null || _bundlerConfig_optimization === void 0 ? true : delete _bundlerConfig_optimization.runtimeChunk;
193
+ patchIgnoreWarning(bundlerConfig);
194
+ if (bundlerConfig.output) {
195
+ var _bundlerConfig_output1, _bundlerConfig_output2;
196
+ if (!((_bundlerConfig_output1 = bundlerConfig.output) === null || _bundlerConfig_output1 === void 0 ? void 0 : _bundlerConfig_output1.chunkLoadingGlobal)) {
197
+ bundlerConfig.output.chunkLoadingGlobal = `chunk_${mfConfig.name}`;
198
+ }
199
+ if (!((_bundlerConfig_output2 = bundlerConfig.output) === null || _bundlerConfig_output2 === void 0 ? void 0 : _bundlerConfig_output2.uniqueName)) {
200
+ bundlerConfig.output.uniqueName = mfConfig.name;
201
+ }
199
202
  }
200
- const splitChunkConfig = chain.optimization.splitChunks.entries();
201
203
  if (!isServer) {
202
- autoDeleteSplitChunkCacheGroups(mfConfig, splitChunkConfig);
204
+ autoDeleteSplitChunkCacheGroups(mfConfig, bundlerConfig);
203
205
  }
204
- if (!isServer && enableSSR && splitChunkConfig && typeof splitChunkConfig === "object" && splitChunkConfig.cacheGroups) {
205
- splitChunkConfig.chunks = "async";
206
+ if (!isServer && enableSSR && typeof ((_bundlerConfig_optimization1 = bundlerConfig.optimization) === null || _bundlerConfig_optimization1 === void 0 ? void 0 : _bundlerConfig_optimization1.splitChunks) === "object" && bundlerConfig.optimization.splitChunks.cacheGroups) {
207
+ bundlerConfig.optimization.splitChunks.chunks = "async";
206
208
  logger.warn(`splitChunks.chunks = async is not allowed with stream SSR mode, it will auto changed to "async"`);
207
209
  }
208
- if (isDev && chain.output.get("publicPath") === "auto") {
210
+ if (isDev && ((_bundlerConfig_output = bundlerConfig.output) === null || _bundlerConfig_output === void 0 ? void 0 : _bundlerConfig_output.publicPath) === "auto") {
209
211
  var _modernjsConfig_dev, _modernjsConfig_server1;
210
212
  const port = ((_modernjsConfig_dev = modernjsConfig.dev) === null || _modernjsConfig_dev === void 0 ? void 0 : _modernjsConfig_dev.port) || ((_modernjsConfig_server1 = modernjsConfig.server) === null || _modernjsConfig_server1 === void 0 ? void 0 : _modernjsConfig_server1.port) || 8080;
211
213
  const publicPath = `http://localhost:${port}/`;
212
- chain.output.publicPath(publicPath);
214
+ bundlerConfig.output.publicPath = publicPath;
213
215
  }
214
216
  if (isServer && enableSSR) {
215
- const uniqueName = mfConfig.name || chain.output.get("uniqueName");
216
- const chunkFileName = chain.output.get("chunkFilename");
217
- if (typeof chunkFileName === "string" && uniqueName && !chunkFileName.includes(uniqueName)) {
217
+ const { output } = bundlerConfig;
218
+ const uniqueName = mfConfig.name || (output === null || output === void 0 ? void 0 : output.uniqueName);
219
+ const chunkFileName = output === null || output === void 0 ? void 0 : output.chunkFilename;
220
+ if (output && typeof chunkFileName === "string" && uniqueName && !chunkFileName.includes(uniqueName)) {
218
221
  const suffix = `${encodeName(uniqueName)}-[chunkhash].js`;
219
- chain.output.chunkFilename(chunkFileName.replace(".js", suffix));
222
+ output.chunkFilename = chunkFileName.replace(".js", suffix);
220
223
  }
221
224
  }
222
225
  if (isDev && enableSSR && !isServer) {
223
- chain.resolve.fallback.set("crypto", false).set("stream", false).set("vm", false);
226
+ bundlerConfig.resolve.fallback = {
227
+ ...bundlerConfig.resolve.fallback,
228
+ crypto: false,
229
+ stream: false,
230
+ vm: false
231
+ };
224
232
  }
225
233
  if (((_modernjsConfig_deploy = modernjsConfig.deploy) === null || _modernjsConfig_deploy === void 0 ? void 0 : _modernjsConfig_deploy.microFrontend) && Object.keys(mfConfig.exposes || {}).length) {
226
- chain.optimization.usedExports(false);
234
+ if (!bundlerConfig.optimization) {
235
+ bundlerConfig.optimization = {};
236
+ }
237
+ bundlerConfig.optimization.usedExports = false;
227
238
  }
228
239
  }
229
240
  const localIpv4 = "127.0.0.1";
@@ -251,10 +262,33 @@ const getIPV4 = () => {
251
262
  };
252
263
  return ipv4Interface.address;
253
264
  };
265
+ const SPLIT_CHUNK_MAP = {
266
+ REACT: "react",
267
+ ROUTER: "router",
268
+ LODASH: "lib-lodash",
269
+ ANTD: "lib-antd",
270
+ ARCO: "lib-arco",
271
+ SEMI: "lib-semi",
272
+ AXIOS: "lib-axios"
273
+ };
274
+ const SHARED_SPLIT_CHUNK_MAP = {
275
+ react: SPLIT_CHUNK_MAP.REACT,
276
+ "react-dom": SPLIT_CHUNK_MAP.REACT,
277
+ "react-router": SPLIT_CHUNK_MAP.ROUTER,
278
+ "react-router-dom": SPLIT_CHUNK_MAP.ROUTER,
279
+ "@remix-run/router": SPLIT_CHUNK_MAP.ROUTER,
280
+ lodash: SPLIT_CHUNK_MAP.LODASH,
281
+ "lodash-es": SPLIT_CHUNK_MAP.LODASH,
282
+ antd: SPLIT_CHUNK_MAP.ANTD,
283
+ "@arco-design/web-react": SPLIT_CHUNK_MAP.ARCO,
284
+ "@douyinfe/semi-ui": SPLIT_CHUNK_MAP.SEMI,
285
+ axios: SPLIT_CHUNK_MAP.AXIOS
286
+ };
254
287
  export {
255
288
  addMyTypes2Ignored,
256
289
  getIPV4,
257
290
  getMFConfig,
258
291
  patchBundlerConfig,
292
+ patchIgnoreWarning,
259
293
  patchMFConfig
260
294
  };
@@ -1,5 +1,5 @@
1
1
  import { it, expect, describe } from "vitest";
2
- import { patchMFConfig, getIPV4 } from "./utils";
2
+ import { patchMFConfig, patchBundlerConfig, getIPV4 } from "./utils";
3
3
  const mfConfig = {
4
4
  name: "host",
5
5
  filename: "remoteEntry.js",
@@ -86,3 +86,63 @@ describe("patchMFConfig", async () => {
86
86
  });
87
87
  });
88
88
  });
89
+ describe("patchBundlerConfig", async () => {
90
+ it("patchBundlerConfig: server", async () => {
91
+ const bundlerConfig = {
92
+ output: {
93
+ publicPath: "auto"
94
+ }
95
+ };
96
+ patchBundlerConfig({
97
+ bundlerType: "webpack",
98
+ bundlerConfig,
99
+ isServer: true,
100
+ modernjsConfig: {
101
+ server: {
102
+ ssr: {
103
+ mode: "stream"
104
+ }
105
+ }
106
+ },
107
+ mfConfig
108
+ });
109
+ const expectedConfig = {
110
+ output: {
111
+ chunkLoadingGlobal: "chunk_host",
112
+ publicPath: "auto",
113
+ uniqueName: "host"
114
+ }
115
+ };
116
+ bundlerConfig === null || bundlerConfig === void 0 ? true : delete bundlerConfig.ignoreWarnings;
117
+ expect(bundlerConfig).toStrictEqual(expectedConfig);
118
+ });
119
+ it("patchBundlerConfig: client", async () => {
120
+ const bundlerConfig = {
121
+ output: {
122
+ publicPath: "auto"
123
+ }
124
+ };
125
+ patchBundlerConfig({
126
+ bundlerType: "webpack",
127
+ bundlerConfig,
128
+ isServer: false,
129
+ modernjsConfig: {
130
+ server: {
131
+ ssr: {
132
+ mode: "stream"
133
+ }
134
+ }
135
+ },
136
+ mfConfig
137
+ });
138
+ const expectedConfig = {
139
+ output: {
140
+ chunkLoadingGlobal: "chunk_host",
141
+ publicPath: "auto",
142
+ uniqueName: "host"
143
+ }
144
+ };
145
+ bundlerConfig === null || bundlerConfig === void 0 ? true : delete bundlerConfig.ignoreWarnings;
146
+ expect(bundlerConfig).toStrictEqual(expectedConfig);
147
+ });
148
+ });
@@ -1,5 +1,15 @@
1
- import type { CliPluginFuture, AppTools } from '@modern-js/app-tools';
1
+ import type { CliPluginFuture, AppTools, UserConfig, Bundler } from '@modern-js/app-tools';
2
+ import type { BundlerConfig } from '../interfaces/bundler';
2
3
  import type { InternalModernPluginOptions } from '../types';
4
+ import { moduleFederationPlugin } from '@module-federation/sdk';
3
5
  export declare function setEnv(enableSSR: boolean): void;
6
+ export declare function modifyBundlerConfig<T extends Bundler>(options: {
7
+ bundlerType: Bundler;
8
+ mfConfig: moduleFederationPlugin.ModuleFederationPluginOptions;
9
+ config: BundlerConfig<T>;
10
+ isServer: boolean;
11
+ modernjsConfig: UserConfig<AppTools>;
12
+ remoteIpStrategy?: 'ipv4' | 'inherit';
13
+ }): void;
4
14
  export declare const moduleFederationConfigPlugin: (userConfig: InternalModernPluginOptions) => CliPluginFuture<AppTools>;
5
15
  export default moduleFederationConfigPlugin;
@@ -1,6 +1,5 @@
1
1
  import type { CliPluginFuture, AppTools } from '@modern-js/app-tools';
2
2
  import type { InternalModernPluginOptions } from '../types';
3
3
  export declare function setEnv(): void;
4
- export declare const CHAIN_MF_PLUGIN_ID = "plugin-module-federation-server";
5
4
  export declare const moduleFederationSSRPlugin: (pluginOptions: Required<InternalModernPluginOptions>) => CliPluginFuture<AppTools>;
6
5
  export default moduleFederationSSRPlugin;
@@ -1,15 +1,17 @@
1
1
  import { moduleFederationPlugin } from '@module-federation/sdk';
2
2
  import { PluginOptions } from '../types';
3
- import type { BundlerChainConfig } from '../interfaces/bundler';
3
+ import type { BundlerConfig, BundlerChainConfig } from '../interfaces/bundler';
4
4
  import type { webpack, UserConfig, AppTools, Rspack, Bundler } from '@modern-js/app-tools';
5
5
  export type ConfigType<T> = T extends 'webpack' ? webpack.Configuration : T extends 'rspack' ? Rspack.Configuration : never;
6
6
  export declare const getMFConfig: (userConfig: PluginOptions) => Promise<moduleFederationPlugin.ModuleFederationPluginOptions>;
7
7
  export declare const patchMFConfig: (mfConfig: moduleFederationPlugin.ModuleFederationPluginOptions, isServer: boolean, remoteIpStrategy?: "ipv4" | "inherit") => moduleFederationPlugin.ModuleFederationPluginOptions;
8
+ export declare function patchIgnoreWarning<T extends Bundler>(bundlerConfig: BundlerConfig<T>): void;
8
9
  export declare function addMyTypes2Ignored(chain: BundlerChainConfig, mfConfig: moduleFederationPlugin.ModuleFederationPluginOptions): void;
9
10
  export declare function patchBundlerConfig<T extends Bundler>(options: {
10
- chain: BundlerChainConfig;
11
+ bundlerConfig: BundlerConfig<T>;
11
12
  isServer: boolean;
12
13
  modernjsConfig: UserConfig<AppTools>;
14
+ bundlerType: Bundler;
13
15
  mfConfig: moduleFederationPlugin.ModuleFederationPluginOptions;
14
16
  }): void;
15
17
  export declare const getIPV4: () => string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@module-federation/modern-js",
3
- "version": "0.0.0-next-20250219103339",
3
+ "version": "0.0.0-next-20250220101307",
4
4
  "files": [
5
5
  "dist/",
6
6
  "types.d.ts",
@@ -84,23 +84,23 @@
84
84
  "author": "hanric <hanric.zhang@gmail.com>",
85
85
  "license": "MIT",
86
86
  "dependencies": {
87
- "@modern-js/node-bundle-require": "2.64.3",
88
- "@modern-js/utils": "2.64.3",
87
+ "@modern-js/node-bundle-require": "2.64.0",
88
+ "@modern-js/utils": "2.64.0",
89
89
  "@swc/helpers": "0.5.13",
90
90
  "node-fetch": "~3.3.0",
91
91
  "react-error-boundary": "4.1.2",
92
- "@module-federation/rsbuild-plugin": "0.0.0-next-20250219103339",
93
- "@module-federation/enhanced": "0.0.0-next-20250219103339",
94
- "@module-federation/node": "0.0.0-next-20250219103339",
95
- "@module-federation/sdk": "0.0.0-next-20250219103339"
92
+ "@module-federation/rsbuild-plugin": "0.0.0-next-20250220101307",
93
+ "@module-federation/enhanced": "0.0.0-next-20250220101307",
94
+ "@module-federation/node": "0.0.0-next-20250220101307",
95
+ "@module-federation/sdk": "0.0.0-next-20250220101307"
96
96
  },
97
97
  "devDependencies": {
98
- "@modern-js/app-tools": "2.64.3",
99
- "@modern-js/core": "2.64.3",
100
- "@modern-js/module-tools": "2.64.3",
101
- "@modern-js/runtime": "2.64.3",
102
- "@modern-js/tsconfig": "2.64.3",
103
- "@module-federation/manifest": "0.0.0-next-20250219103339"
98
+ "@modern-js/app-tools": "2.64.0",
99
+ "@modern-js/core": "2.64.0",
100
+ "@modern-js/module-tools": "2.64.0",
101
+ "@modern-js/runtime": "2.64.0",
102
+ "@modern-js/tsconfig": "2.64.0",
103
+ "@module-federation/manifest": "0.0.0-next-20250220101307"
104
104
  },
105
105
  "peerDependencies": {
106
106
  "react": ">=17",