@module-federation/modern-js 0.0.0-next-20250219105538 → 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.
@@ -12,7 +12,6 @@ function setEnv() {
12
12
  process.env["MF_DISABLE_EMIT_STATS"] = "true";
13
13
  process.env["MF_SSR_PRJ"] = "true";
14
14
  }
15
- var CHAIN_MF_PLUGIN_ID = "plugin-module-federation-server";
16
15
  var moduleFederationSSRPlugin = function(pluginOptions) {
17
16
  return {
18
17
  name: "@modern-js/plugin-module-federation-ssr",
@@ -50,35 +49,35 @@ var moduleFederationSSRPlugin = function(pluginOptions) {
50
49
  plugins
51
50
  };
52
51
  });
53
- api.modifyBundlerChain(function(chain, param) {
54
- var isServer = param.isServer;
55
- var bundlerType = api.getAppContext().bundlerType === "rspack" ? "rspack" : "webpack";
56
- var MFPlugin = bundlerType === "webpack" ? ModuleFederationPlugin : RspackModuleFederationPlugin;
57
- if (isServer) {
58
- if (!chain.plugins.has(CHAIN_MF_PLUGIN_ID)) {
59
- chain.plugin(CHAIN_MF_PLUGIN_ID).use(MFPlugin, [
60
- pluginOptions.ssrConfig
61
- ]).init(function(Plugin, args) {
62
- pluginOptions.nodePlugin = new Plugin(args[0]);
63
- return pluginOptions.nodePlugin;
64
- });
65
- }
66
- }
67
- if (isServer) {
68
- chain.target("async-node");
69
- if (isDev) {
70
- chain.plugin("UniverseEntryChunkTrackerPlugin").use(UniverseEntryChunkTrackerPlugin);
71
- }
72
- }
73
- if (isDev && !isServer) {
74
- chain.externals({
75
- "@module-federation/node/utils": "NOT_USED_IN_BROWSER"
76
- });
77
- }
78
- });
79
52
  api.config(function() {
80
53
  return {
81
54
  tools: {
55
+ rspack: function rspack(config, param) {
56
+ var isServer = param.isServer;
57
+ if (isServer) {
58
+ if (!pluginOptions.nodePlugin) {
59
+ var _config_plugins;
60
+ pluginOptions.nodePlugin = new RspackModuleFederationPlugin(pluginOptions.ssrConfig);
61
+ (_config_plugins = config.plugins) === null || _config_plugins === void 0 ? void 0 : _config_plugins.push(pluginOptions.nodePlugin);
62
+ }
63
+ } else {
64
+ var _config_output;
65
+ pluginOptions.distOutputDir = pluginOptions.distOutputDir || ((_config_output = config.output) === null || _config_output === void 0 ? void 0 : _config_output.path) || path.resolve(process.cwd(), "dist");
66
+ }
67
+ },
68
+ webpack: function webpack(config, param) {
69
+ var isServer = param.isServer;
70
+ if (isServer) {
71
+ if (!pluginOptions.nodePlugin) {
72
+ var _config_plugins;
73
+ pluginOptions.nodePlugin = new ModuleFederationPlugin(pluginOptions.ssrConfig);
74
+ (_config_plugins = config.plugins) === null || _config_plugins === void 0 ? void 0 : _config_plugins.push(pluginOptions.nodePlugin);
75
+ }
76
+ } else {
77
+ var _config_output;
78
+ pluginOptions.distOutputDir = pluginOptions.distOutputDir || ((_config_output = config.output) === null || _config_output === void 0 ? void 0 : _config_output.path) || path.resolve(process.cwd(), "dist");
79
+ }
80
+ },
82
81
  devServer: {
83
82
  before: [
84
83
  function(req, res, next) {
@@ -104,6 +103,20 @@ var moduleFederationSSRPlugin = function(pluginOptions) {
104
103
  }
105
104
  }
106
105
  ]
106
+ },
107
+ bundlerChain: function bundlerChain(chain, param) {
108
+ var isServer = param.isServer;
109
+ if (isServer) {
110
+ chain.target("async-node");
111
+ if (isDev) {
112
+ chain.plugin("UniverseEntryChunkTrackerPlugin").use(UniverseEntryChunkTrackerPlugin);
113
+ }
114
+ }
115
+ if (isDev && !isServer) {
116
+ chain.externals({
117
+ "@module-federation/node/utils": "NOT_USED_IN_BROWSER"
118
+ });
119
+ }
107
120
  }
108
121
  }
109
122
  };
@@ -129,7 +142,6 @@ var moduleFederationSSRPlugin = function(pluginOptions) {
129
142
  };
130
143
  var ssrPlugin_default = moduleFederationSSRPlugin;
131
144
  export {
132
- CHAIN_MF_PLUGIN_ID,
133
145
  ssrPlugin_default as default,
134
146
  moduleFederationSSRPlugin,
135
147
  setEnv
@@ -166,14 +166,14 @@ var patchMFConfig = function(mfConfig, isServer, remoteIpStrategy) {
166
166
  mfConfig.dev = false;
167
167
  return mfConfig;
168
168
  };
169
- function patchIgnoreWarning(chain) {
170
- var ignoreWarnings = chain.get("ignoreWarnings") || [];
169
+ function patchIgnoreWarning(bundlerConfig) {
170
+ bundlerConfig.ignoreWarnings = bundlerConfig.ignoreWarnings || [];
171
171
  var ignoredMsgs = [
172
172
  "external script",
173
173
  "process.env.WS_NO_BUFFER_UTIL",
174
174
  "Can't resolve 'utf-8-validate"
175
175
  ];
176
- ignoreWarnings.push(function(warning) {
176
+ bundlerConfig.ignoreWarnings.push(function(warning) {
177
177
  if (ignoredMsgs.some(function(msg) {
178
178
  return warning.message.includes(msg);
179
179
  })) {
@@ -181,7 +181,6 @@ function patchIgnoreWarning(chain) {
181
181
  }
182
182
  return false;
183
183
  });
184
- chain.ignoreWarnings(ignoreWarnings);
185
184
  }
186
185
  function addMyTypes2Ignored(chain, mfConfig) {
187
186
  var watchOptions = chain.get("watchOptions");
@@ -216,44 +215,54 @@ function addMyTypes2Ignored(chain, mfConfig) {
216
215
  }));
217
216
  }
218
217
  function patchBundlerConfig(options) {
219
- var _modernjsConfig_server, _modernjsConfig_deploy;
220
- var chain = options.chain, modernjsConfig = options.modernjsConfig, isServer = options.isServer, mfConfig = options.mfConfig;
218
+ var _modernjsConfig_server, _bundlerConfig_optimization, _bundlerConfig_optimization1, _bundlerConfig_output, _modernjsConfig_deploy;
219
+ var bundlerConfig = options.bundlerConfig, modernjsConfig = options.modernjsConfig, isServer = options.isServer, mfConfig = options.mfConfig, bundlerType = options.bundlerType;
221
220
  var enableSSR = Boolean((_modernjsConfig_server = modernjsConfig.server) === null || _modernjsConfig_server === void 0 ? void 0 : _modernjsConfig_server.ssr);
222
- chain.optimization.delete("runtimeChunk");
223
- patchIgnoreWarning(chain);
224
- if (!chain.output.get("chunkLoadingGlobal")) {
225
- chain.output.chunkLoadingGlobal("chunk_".concat(mfConfig.name));
226
- }
227
- if (!chain.output.get("uniqueName")) {
228
- chain.output.uniqueName(mfConfig.name);
221
+ (_bundlerConfig_optimization = bundlerConfig.optimization) === null || _bundlerConfig_optimization === void 0 ? true : delete _bundlerConfig_optimization.runtimeChunk;
222
+ patchIgnoreWarning(bundlerConfig);
223
+ if (bundlerConfig.output) {
224
+ var _bundlerConfig_output1, _bundlerConfig_output2;
225
+ if (!((_bundlerConfig_output1 = bundlerConfig.output) === null || _bundlerConfig_output1 === void 0 ? void 0 : _bundlerConfig_output1.chunkLoadingGlobal)) {
226
+ bundlerConfig.output.chunkLoadingGlobal = "chunk_".concat(mfConfig.name);
227
+ }
228
+ if (!((_bundlerConfig_output2 = bundlerConfig.output) === null || _bundlerConfig_output2 === void 0 ? void 0 : _bundlerConfig_output2.uniqueName)) {
229
+ bundlerConfig.output.uniqueName = mfConfig.name;
230
+ }
229
231
  }
230
- var splitChunkConfig = chain.optimization.splitChunks.entries();
231
232
  if (!isServer) {
232
- autoDeleteSplitChunkCacheGroups(mfConfig, splitChunkConfig);
233
+ autoDeleteSplitChunkCacheGroups(mfConfig, bundlerConfig);
233
234
  }
234
- if (!isServer && enableSSR && splitChunkConfig && (typeof splitChunkConfig === "undefined" ? "undefined" : _type_of(splitChunkConfig)) === "object" && splitChunkConfig.cacheGroups) {
235
- splitChunkConfig.chunks = "async";
235
+ if (!isServer && enableSSR && _type_of((_bundlerConfig_optimization1 = bundlerConfig.optimization) === null || _bundlerConfig_optimization1 === void 0 ? void 0 : _bundlerConfig_optimization1.splitChunks) === "object" && bundlerConfig.optimization.splitChunks.cacheGroups) {
236
+ bundlerConfig.optimization.splitChunks.chunks = "async";
236
237
  logger.warn('splitChunks.chunks = async is not allowed with stream SSR mode, it will auto changed to "async"');
237
238
  }
238
- if (isDev && chain.output.get("publicPath") === "auto") {
239
+ if (isDev && ((_bundlerConfig_output = bundlerConfig.output) === null || _bundlerConfig_output === void 0 ? void 0 : _bundlerConfig_output.publicPath) === "auto") {
239
240
  var _modernjsConfig_dev, _modernjsConfig_server1;
240
241
  var 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;
241
242
  var publicPath = "http://localhost:".concat(port, "/");
242
- chain.output.publicPath(publicPath);
243
+ bundlerConfig.output.publicPath = publicPath;
243
244
  }
244
245
  if (isServer && enableSSR) {
245
- var uniqueName = mfConfig.name || chain.output.get("uniqueName");
246
- var chunkFileName = chain.output.get("chunkFilename");
247
- if (typeof chunkFileName === "string" && uniqueName && !chunkFileName.includes(uniqueName)) {
246
+ var output = bundlerConfig.output;
247
+ var uniqueName = mfConfig.name || (output === null || output === void 0 ? void 0 : output.uniqueName);
248
+ var chunkFileName = output === null || output === void 0 ? void 0 : output.chunkFilename;
249
+ if (output && typeof chunkFileName === "string" && uniqueName && !chunkFileName.includes(uniqueName)) {
248
250
  var suffix = "".concat(encodeName(uniqueName), "-[chunkhash].js");
249
- chain.output.chunkFilename(chunkFileName.replace(".js", suffix));
251
+ output.chunkFilename = chunkFileName.replace(".js", suffix);
250
252
  }
251
253
  }
252
254
  if (isDev && enableSSR && !isServer) {
253
- chain.resolve.fallback.set("crypto", false).set("stream", false).set("vm", false);
255
+ bundlerConfig.resolve.fallback = _object_spread_props(_object_spread({}, bundlerConfig.resolve.fallback), {
256
+ crypto: false,
257
+ stream: false,
258
+ vm: false
259
+ });
254
260
  }
255
261
  if (((_modernjsConfig_deploy = modernjsConfig.deploy) === null || _modernjsConfig_deploy === void 0 ? void 0 : _modernjsConfig_deploy.microFrontend) && Object.keys(mfConfig.exposes || {}).length) {
256
- chain.optimization.usedExports(false);
262
+ if (!bundlerConfig.optimization) {
263
+ bundlerConfig.optimization = {};
264
+ }
265
+ bundlerConfig.optimization.usedExports = false;
257
266
  }
258
267
  }
259
268
  var localIpv4 = "127.0.0.1";
@@ -281,10 +290,33 @@ var getIPV4 = function() {
281
290
  };
282
291
  return ipv4Interface.address;
283
292
  };
293
+ var SPLIT_CHUNK_MAP = {
294
+ REACT: "react",
295
+ ROUTER: "router",
296
+ LODASH: "lib-lodash",
297
+ ANTD: "lib-antd",
298
+ ARCO: "lib-arco",
299
+ SEMI: "lib-semi",
300
+ AXIOS: "lib-axios"
301
+ };
302
+ var SHARED_SPLIT_CHUNK_MAP = {
303
+ react: SPLIT_CHUNK_MAP.REACT,
304
+ "react-dom": SPLIT_CHUNK_MAP.REACT,
305
+ "react-router": SPLIT_CHUNK_MAP.ROUTER,
306
+ "react-router-dom": SPLIT_CHUNK_MAP.ROUTER,
307
+ "@remix-run/router": SPLIT_CHUNK_MAP.ROUTER,
308
+ lodash: SPLIT_CHUNK_MAP.LODASH,
309
+ "lodash-es": SPLIT_CHUNK_MAP.LODASH,
310
+ antd: SPLIT_CHUNK_MAP.ANTD,
311
+ "@arco-design/web-react": SPLIT_CHUNK_MAP.ARCO,
312
+ "@douyinfe/semi-ui": SPLIT_CHUNK_MAP.SEMI,
313
+ axios: SPLIT_CHUNK_MAP.AXIOS
314
+ };
284
315
  export {
285
316
  addMyTypes2Ignored,
286
317
  getIPV4,
287
318
  getMFConfig,
288
319
  patchBundlerConfig,
320
+ patchIgnoreWarning,
289
321
  patchMFConfig
290
322
  };
@@ -1,7 +1,7 @@
1
1
  import { _ as _async_to_generator } from "@swc/helpers/_/_async_to_generator";
2
2
  import { _ as _ts_generator } from "@swc/helpers/_/_ts_generator";
3
3
  import { it, expect, describe } from "vitest";
4
- import { patchMFConfig, getIPV4 } from "./utils";
4
+ import { patchMFConfig, patchBundlerConfig, getIPV4 } from "./utils";
5
5
  var mfConfig = {
6
6
  name: "host",
7
7
  filename: "remoteEntry.js",
@@ -105,3 +105,80 @@ describe("patchMFConfig", /* @__PURE__ */ _async_to_generator(function() {
105
105
  ];
106
106
  });
107
107
  }));
108
+ describe("patchBundlerConfig", /* @__PURE__ */ _async_to_generator(function() {
109
+ return _ts_generator(this, function(_state) {
110
+ it("patchBundlerConfig: server", /* @__PURE__ */ _async_to_generator(function() {
111
+ var bundlerConfig, expectedConfig;
112
+ return _ts_generator(this, function(_state2) {
113
+ bundlerConfig = {
114
+ output: {
115
+ publicPath: "auto"
116
+ }
117
+ };
118
+ patchBundlerConfig({
119
+ bundlerType: "webpack",
120
+ bundlerConfig,
121
+ isServer: true,
122
+ modernjsConfig: {
123
+ server: {
124
+ ssr: {
125
+ mode: "stream"
126
+ }
127
+ }
128
+ },
129
+ mfConfig
130
+ });
131
+ expectedConfig = {
132
+ output: {
133
+ chunkLoadingGlobal: "chunk_host",
134
+ publicPath: "auto",
135
+ uniqueName: "host"
136
+ }
137
+ };
138
+ bundlerConfig === null || bundlerConfig === void 0 ? true : delete bundlerConfig.ignoreWarnings;
139
+ expect(bundlerConfig).toStrictEqual(expectedConfig);
140
+ return [
141
+ 2
142
+ ];
143
+ });
144
+ }));
145
+ it("patchBundlerConfig: client", /* @__PURE__ */ _async_to_generator(function() {
146
+ var bundlerConfig, expectedConfig;
147
+ return _ts_generator(this, function(_state2) {
148
+ bundlerConfig = {
149
+ output: {
150
+ publicPath: "auto"
151
+ }
152
+ };
153
+ patchBundlerConfig({
154
+ bundlerType: "webpack",
155
+ bundlerConfig,
156
+ isServer: false,
157
+ modernjsConfig: {
158
+ server: {
159
+ ssr: {
160
+ mode: "stream"
161
+ }
162
+ }
163
+ },
164
+ mfConfig
165
+ });
166
+ expectedConfig = {
167
+ output: {
168
+ chunkLoadingGlobal: "chunk_host",
169
+ publicPath: "auto",
170
+ uniqueName: "host"
171
+ }
172
+ };
173
+ bundlerConfig === null || bundlerConfig === void 0 ? true : delete bundlerConfig.ignoreWarnings;
174
+ expect(bundlerConfig).toStrictEqual(expectedConfig);
175
+ return [
176
+ 2
177
+ ];
178
+ });
179
+ }));
180
+ return [
181
+ 2
182
+ ];
183
+ });
184
+ }));
@@ -6,6 +6,17 @@ function setEnv(enableSSR) {
6
6
  process.env["MF_SSR_PRJ"] = "true";
7
7
  }
8
8
  }
9
+ function modifyBundlerConfig(options) {
10
+ const { mfConfig, config, isServer, modernjsConfig, remoteIpStrategy = "ipv4", bundlerType } = options;
11
+ patchMFConfig(mfConfig, isServer, remoteIpStrategy);
12
+ patchBundlerConfig({
13
+ bundlerType,
14
+ bundlerConfig: config,
15
+ isServer,
16
+ modernjsConfig,
17
+ mfConfig
18
+ });
19
+ }
9
20
  const moduleFederationConfigPlugin = (userConfig) => ({
10
21
  name: "@modern-js/plugin-module-federation-config",
11
22
  pre: [
@@ -21,19 +32,6 @@ const moduleFederationConfigPlugin = (userConfig) => ({
21
32
  const ssrConfig = userConfig.ssrConfig || JSON.parse(JSON.stringify(mfConfig));
22
33
  userConfig.ssrConfig = ssrConfig;
23
34
  userConfig.csrConfig = csrConfig;
24
- api.modifyBundlerChain((chain, { isProd, isServer }) => {
25
- addMyTypes2Ignored(chain, isServer ? ssrConfig : csrConfig);
26
- const targetMFConfig = isServer ? ssrConfig : csrConfig;
27
- patchMFConfig(targetMFConfig, isServer, userConfig.remoteIpStrategy || "ipv4");
28
- patchBundlerConfig({
29
- // @ts-expect-error chain type is not correct
30
- chain,
31
- isServer,
32
- modernjsConfig,
33
- mfConfig
34
- });
35
- userConfig.distOutputDir = chain.output.get("path") || path.resolve(process.cwd(), "dist");
36
- });
37
35
  api.config(() => {
38
36
  var _userConfig_userConfig, _modernjsConfig_server, _modernjsConfig_source, _modernjsConfig_source1, _modernjsConfig_dev;
39
37
  const bundlerType = api.getAppContext().bundlerType === "rspack" ? "rspack" : "webpack";
@@ -49,6 +47,33 @@ const moduleFederationConfigPlugin = (userConfig) => ({
49
47
  var _modernjsConfig_source_enableAsyncEntry;
50
48
  return {
51
49
  tools: {
50
+ bundlerChain(chain, { isServer }) {
51
+ addMyTypes2Ignored(chain, isServer ? ssrConfig : csrConfig);
52
+ },
53
+ rspack(config, { isServer }) {
54
+ var _config_output;
55
+ modifyBundlerConfig({
56
+ bundlerType,
57
+ mfConfig: isServer ? ssrConfig : csrConfig,
58
+ config,
59
+ isServer,
60
+ modernjsConfig,
61
+ remoteIpStrategy: userConfig.remoteIpStrategy
62
+ });
63
+ userConfig.distOutputDir = ((_config_output = config.output) === null || _config_output === void 0 ? void 0 : _config_output.path) || path.resolve(process.cwd(), "dist");
64
+ },
65
+ webpack(config, { isServer }) {
66
+ var _config_output;
67
+ modifyBundlerConfig({
68
+ bundlerType,
69
+ mfConfig: isServer ? ssrConfig : csrConfig,
70
+ config,
71
+ isServer,
72
+ modernjsConfig,
73
+ remoteIpStrategy: userConfig.remoteIpStrategy
74
+ });
75
+ userConfig.distOutputDir = ((_config_output = config.output) === null || _config_output === void 0 ? void 0 : _config_output.path) || path.resolve(process.cwd(), "dist");
76
+ },
52
77
  devServer: {
53
78
  headers: {
54
79
  "Access-Control-Allow-Origin": "*",
@@ -77,6 +102,7 @@ const moduleFederationConfigPlugin = (userConfig) => ({
77
102
  var configPlugin_default = moduleFederationConfigPlugin;
78
103
  export {
79
104
  configPlugin_default as default,
105
+ modifyBundlerConfig,
80
106
  moduleFederationConfigPlugin,
81
107
  setEnv
82
108
  };
@@ -17,31 +17,37 @@ const moduleFederationPlugin = (userConfig = {}) => {
17
17
  name: "@modern-js/plugin-module-federation",
18
18
  setup: async (api) => {
19
19
  const modernjsConfig = api.getConfig();
20
- api.modifyBundlerChain((chain, { isServer }) => {
21
- const bundlerType = api.getAppContext().bundlerType === "rspack" ? "rspack" : "webpack";
22
- const browserPluginOptions = internalModernPluginOptions.csrConfig;
23
- const MFPlugin = bundlerType === "webpack" ? WebpackModuleFederationPlugin : RspackModuleFederationPlugin;
24
- if (!isServer) {
25
- chain.plugin("plugin-module-federation").use(MFPlugin, [
26
- browserPluginOptions
27
- ]).init((Plugin, args) => {
28
- internalModernPluginOptions.browserPlugin = new Plugin(args[0]);
29
- return internalModernPluginOptions.browserPlugin;
30
- });
31
- }
32
- if (bundlerType === "webpack") {
33
- var _modernjsConfig_source;
34
- const enableAsyncEntry = (_modernjsConfig_source = modernjsConfig.source) === null || _modernjsConfig_source === void 0 ? void 0 : _modernjsConfig_source.enableAsyncEntry;
35
- if (!enableAsyncEntry && browserPluginOptions.async !== false) {
36
- const asyncBoundaryPluginOptions = typeof browserPluginOptions.async === "object" ? browserPluginOptions.async : {
37
- eager: (module) => module && /\.federation/.test((module === null || module === void 0 ? void 0 : module.request) || ""),
38
- excludeChunk: (chunk) => chunk.name === browserPluginOptions.name
39
- };
40
- chain.plugin("async-boundary-plugin").use(AsyncBoundaryPlugin, [
41
- asyncBoundaryPluginOptions
42
- ]);
20
+ api.config(() => {
21
+ return {
22
+ tools: {
23
+ rspack(config, { isServer }) {
24
+ const browserPluginOptions = internalModernPluginOptions.csrConfig;
25
+ if (!isServer) {
26
+ var _config_plugins;
27
+ internalModernPluginOptions.browserPlugin = new RspackModuleFederationPlugin(browserPluginOptions);
28
+ (_config_plugins = config.plugins) === null || _config_plugins === void 0 ? void 0 : _config_plugins.push(internalModernPluginOptions.browserPlugin);
29
+ }
30
+ },
31
+ webpack(config, { isServer }) {
32
+ var _modernjsConfig_source;
33
+ const browserPluginOptions = internalModernPluginOptions.csrConfig;
34
+ if (!isServer) {
35
+ var _config_plugins;
36
+ internalModernPluginOptions.browserPlugin = new WebpackModuleFederationPlugin(browserPluginOptions);
37
+ (_config_plugins = config.plugins) === null || _config_plugins === void 0 ? void 0 : _config_plugins.push(internalModernPluginOptions.browserPlugin);
38
+ }
39
+ const enableAsyncEntry = (_modernjsConfig_source = modernjsConfig.source) === null || _modernjsConfig_source === void 0 ? void 0 : _modernjsConfig_source.enableAsyncEntry;
40
+ if (!enableAsyncEntry && browserPluginOptions.async !== false) {
41
+ var _config_plugins1;
42
+ const asyncBoundaryPluginOptions = typeof browserPluginOptions.async === "object" ? browserPluginOptions.async : {
43
+ eager: (module) => module && /\.federation/.test((module === null || module === void 0 ? void 0 : module.request) || ""),
44
+ excludeChunk: (chunk) => chunk.name === browserPluginOptions.name
45
+ };
46
+ (_config_plugins1 = config.plugins) === null || _config_plugins1 === void 0 ? void 0 : _config_plugins1.push(new AsyncBoundaryPlugin(asyncBoundaryPluginOptions));
47
+ }
48
+ }
43
49
  }
44
- }
50
+ };
45
51
  });
46
52
  },
47
53
  usePlugins: [
@@ -10,7 +10,6 @@ function setEnv() {
10
10
  process.env["MF_DISABLE_EMIT_STATS"] = "true";
11
11
  process.env["MF_SSR_PRJ"] = "true";
12
12
  }
13
- const CHAIN_MF_PLUGIN_ID = "plugin-module-federation-server";
14
13
  const moduleFederationSSRPlugin = (pluginOptions) => ({
15
14
  name: "@modern-js/plugin-module-federation-ssr",
16
15
  pre: [
@@ -42,34 +41,33 @@ const moduleFederationSSRPlugin = (pluginOptions) => ({
42
41
  plugins
43
42
  };
44
43
  });
45
- api.modifyBundlerChain((chain, { isServer }) => {
46
- const bundlerType = api.getAppContext().bundlerType === "rspack" ? "rspack" : "webpack";
47
- const MFPlugin = bundlerType === "webpack" ? ModuleFederationPlugin : RspackModuleFederationPlugin;
48
- if (isServer) {
49
- if (!chain.plugins.has(CHAIN_MF_PLUGIN_ID)) {
50
- chain.plugin(CHAIN_MF_PLUGIN_ID).use(MFPlugin, [
51
- pluginOptions.ssrConfig
52
- ]).init((Plugin, args) => {
53
- pluginOptions.nodePlugin = new Plugin(args[0]);
54
- return pluginOptions.nodePlugin;
55
- });
56
- }
57
- }
58
- if (isServer) {
59
- chain.target("async-node");
60
- if (isDev) {
61
- chain.plugin("UniverseEntryChunkTrackerPlugin").use(UniverseEntryChunkTrackerPlugin);
62
- }
63
- }
64
- if (isDev && !isServer) {
65
- chain.externals({
66
- "@module-federation/node/utils": "NOT_USED_IN_BROWSER"
67
- });
68
- }
69
- });
70
44
  api.config(() => {
71
45
  return {
72
46
  tools: {
47
+ rspack(config, { isServer }) {
48
+ if (isServer) {
49
+ if (!pluginOptions.nodePlugin) {
50
+ var _config_plugins;
51
+ pluginOptions.nodePlugin = new RspackModuleFederationPlugin(pluginOptions.ssrConfig);
52
+ (_config_plugins = config.plugins) === null || _config_plugins === void 0 ? void 0 : _config_plugins.push(pluginOptions.nodePlugin);
53
+ }
54
+ } else {
55
+ var _config_output;
56
+ pluginOptions.distOutputDir = pluginOptions.distOutputDir || ((_config_output = config.output) === null || _config_output === void 0 ? void 0 : _config_output.path) || path.resolve(process.cwd(), "dist");
57
+ }
58
+ },
59
+ webpack(config, { isServer }) {
60
+ if (isServer) {
61
+ if (!pluginOptions.nodePlugin) {
62
+ var _config_plugins;
63
+ pluginOptions.nodePlugin = new ModuleFederationPlugin(pluginOptions.ssrConfig);
64
+ (_config_plugins = config.plugins) === null || _config_plugins === void 0 ? void 0 : _config_plugins.push(pluginOptions.nodePlugin);
65
+ }
66
+ } else {
67
+ var _config_output;
68
+ pluginOptions.distOutputDir = pluginOptions.distOutputDir || ((_config_output = config.output) === null || _config_output === void 0 ? void 0 : _config_output.path) || path.resolve(process.cwd(), "dist");
69
+ }
70
+ },
73
71
  devServer: {
74
72
  before: [
75
73
  (req, res, next) => {
@@ -95,6 +93,19 @@ const moduleFederationSSRPlugin = (pluginOptions) => ({
95
93
  }
96
94
  }
97
95
  ]
96
+ },
97
+ bundlerChain(chain, { isServer }) {
98
+ if (isServer) {
99
+ chain.target("async-node");
100
+ if (isDev) {
101
+ chain.plugin("UniverseEntryChunkTrackerPlugin").use(UniverseEntryChunkTrackerPlugin);
102
+ }
103
+ }
104
+ if (isDev && !isServer) {
105
+ chain.externals({
106
+ "@module-federation/node/utils": "NOT_USED_IN_BROWSER"
107
+ });
108
+ }
98
109
  }
99
110
  }
100
111
  };
@@ -111,7 +122,6 @@ const moduleFederationSSRPlugin = (pluginOptions) => ({
111
122
  });
112
123
  var ssrPlugin_default = moduleFederationSSRPlugin;
113
124
  export {
114
- CHAIN_MF_PLUGIN_ID,
115
125
  ssrPlugin_default as default,
116
126
  moduleFederationSSRPlugin,
117
127
  setEnv