@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.
- package/dist/cjs/cli/configPlugin.js +40 -13
- package/dist/cjs/cli/index.js +30 -24
- package/dist/cjs/cli/ssrPlugin.js +37 -28
- package/dist/cjs/cli/utils.js +59 -25
- package/dist/cjs/cli/utils.spec.js +60 -0
- package/dist/esm/cli/configPlugin.js +42 -14
- package/dist/esm/cli/index.js +35 -28
- package/dist/esm/cli/ssrPlugin.js +40 -28
- package/dist/esm/cli/utils.js +57 -25
- package/dist/esm/cli/utils.spec.js +78 -1
- package/dist/esm-node/cli/configPlugin.js +39 -13
- package/dist/esm-node/cli/index.js +30 -24
- package/dist/esm-node/cli/ssrPlugin.js +37 -27
- package/dist/esm-node/cli/utils.js +58 -25
- package/dist/esm-node/cli/utils.spec.js +61 -1
- package/dist/types/cli/configPlugin.d.ts +11 -1
- package/dist/types/cli/ssrPlugin.d.ts +0 -1
- package/dist/types/cli/utils.d.ts +4 -2
- package/package.json +13 -13
|
@@ -135,20 +135,19 @@ const patchMFConfig = (mfConfig, isServer, remoteIpStrategy) => {
|
|
|
135
135
|
mfConfig.dev = false;
|
|
136
136
|
return mfConfig;
|
|
137
137
|
};
|
|
138
|
-
function patchIgnoreWarning(
|
|
139
|
-
|
|
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,44 +186,55 @@ function addMyTypes2Ignored(chain, mfConfig) {
|
|
|
187
186
|
});
|
|
188
187
|
}
|
|
189
188
|
function patchBundlerConfig(options) {
|
|
190
|
-
var _modernjsConfig_server, _modernjsConfig_deploy;
|
|
191
|
-
const {
|
|
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
|
-
|
|
194
|
-
patchIgnoreWarning(
|
|
195
|
-
if (
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
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
|
+
}
|
|
200
202
|
}
|
|
201
|
-
const splitChunkConfig = chain.optimization.splitChunks.entries();
|
|
202
203
|
if (!isServer) {
|
|
203
|
-
autoDeleteSplitChunkCacheGroups(mfConfig,
|
|
204
|
+
autoDeleteSplitChunkCacheGroups(mfConfig, bundlerConfig);
|
|
204
205
|
}
|
|
205
|
-
if (!isServer && enableSSR &&
|
|
206
|
-
|
|
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";
|
|
207
208
|
logger.warn(`splitChunks.chunks = async is not allowed with stream SSR mode, it will auto changed to "async"`);
|
|
208
209
|
}
|
|
209
|
-
if (isDev &&
|
|
210
|
+
if (isDev && ((_bundlerConfig_output = bundlerConfig.output) === null || _bundlerConfig_output === void 0 ? void 0 : _bundlerConfig_output.publicPath) === "auto") {
|
|
210
211
|
var _modernjsConfig_dev, _modernjsConfig_server1;
|
|
211
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;
|
|
212
213
|
const publicPath = `http://localhost:${port}/`;
|
|
213
|
-
|
|
214
|
+
bundlerConfig.output.publicPath = publicPath;
|
|
214
215
|
}
|
|
215
216
|
if (isServer && enableSSR) {
|
|
216
|
-
const
|
|
217
|
-
const
|
|
218
|
-
|
|
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)) {
|
|
219
221
|
const suffix = `${encodeName(uniqueName)}-[chunkhash].js`;
|
|
220
|
-
|
|
222
|
+
output.chunkFilename = chunkFileName.replace(".js", suffix);
|
|
221
223
|
}
|
|
222
224
|
}
|
|
223
225
|
if (isDev && enableSSR && !isServer) {
|
|
224
|
-
|
|
226
|
+
bundlerConfig.resolve.fallback = {
|
|
227
|
+
...bundlerConfig.resolve.fallback,
|
|
228
|
+
crypto: false,
|
|
229
|
+
stream: false,
|
|
230
|
+
vm: false
|
|
231
|
+
};
|
|
225
232
|
}
|
|
226
233
|
if (((_modernjsConfig_deploy = modernjsConfig.deploy) === null || _modernjsConfig_deploy === void 0 ? void 0 : _modernjsConfig_deploy.microFrontend) && Object.keys(mfConfig.exposes || {}).length) {
|
|
227
|
-
|
|
234
|
+
if (!bundlerConfig.optimization) {
|
|
235
|
+
bundlerConfig.optimization = {};
|
|
236
|
+
}
|
|
237
|
+
bundlerConfig.optimization.usedExports = false;
|
|
228
238
|
}
|
|
229
239
|
}
|
|
230
240
|
const localIpv4 = "127.0.0.1";
|
|
@@ -252,10 +262,33 @@ const getIPV4 = () => {
|
|
|
252
262
|
};
|
|
253
263
|
return ipv4Interface.address;
|
|
254
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
|
+
};
|
|
255
287
|
export {
|
|
256
288
|
addMyTypes2Ignored,
|
|
257
289
|
getIPV4,
|
|
258
290
|
getMFConfig,
|
|
259
291
|
patchBundlerConfig,
|
|
292
|
+
patchIgnoreWarning,
|
|
260
293
|
patchMFConfig
|
|
261
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
|
-
|
|
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-
|
|
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.
|
|
88
|
-
"@modern-js/utils": "2.64.
|
|
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-
|
|
93
|
-
"@module-federation/enhanced": "0.0.0-next-
|
|
94
|
-
"@module-federation/node": "0.0.0-next-
|
|
95
|
-
"@module-federation/sdk": "0.0.0-next-
|
|
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.
|
|
99
|
-
"@modern-js/core": "2.64.
|
|
100
|
-
"@modern-js/module-tools": "2.64.
|
|
101
|
-
"@modern-js/runtime": "2.64.
|
|
102
|
-
"@modern-js/tsconfig": "2.64.
|
|
103
|
-
"@module-federation/manifest": "0.0.0-next-
|
|
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",
|