Skip to content

Commit

Permalink
chore: use new modern.js plugin for improved functionality
Browse files Browse the repository at this point in the history
  • Loading branch information
caohuilin committed Jan 23, 2025
1 parent b081094 commit 0d704f8
Show file tree
Hide file tree
Showing 7 changed files with 448 additions and 392 deletions.
5 changes: 5 additions & 0 deletions .changeset/bright-planets-boil.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@module-federation/modern-js': patch
---

chore: use new modern.js plugin for improved functionality
4 changes: 1 addition & 3 deletions packages/modernjs/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,6 @@
"@module-federation/node": "workspace:*",
"@module-federation/sdk": "workspace:*",
"@swc/helpers": "0.5.13",
"hoist-non-react-statics": "3.3.2",
"node-fetch": "~3.3.0",
"react-error-boundary": "4.1.2"
},
Expand All @@ -104,8 +103,7 @@
"@modern-js/module-tools": "2.64.0",
"@modern-js/runtime": "2.64.0",
"@modern-js/tsconfig": "2.64.0",
"@module-federation/manifest": "workspace:*",
"@types/hoist-non-react-statics": "3.3.5"
"@module-federation/manifest": "workspace:*"
},
"peerDependencies": {
"react": ">=17",
Expand Down
150 changes: 74 additions & 76 deletions packages/modernjs/src/cli/configPlugin.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import path from 'path';
import type {
CliPlugin,
CliPluginFuture,
AppTools,
UserConfig,
Bundler,
Expand Down Expand Up @@ -53,12 +53,12 @@ export function modifyBundlerConfig<T extends Bundler>(options: {

export const moduleFederationConfigPlugin = (
userConfig: InternalModernPluginOptions,
): CliPlugin<AppTools> => ({
): CliPluginFuture<AppTools> => ({
name: '@modern-js/plugin-module-federation-config',
pre: ['@modern-js/plugin-initialize'],
post: ['@modern-js/plugin-module-federation'],
setup: async ({ useConfigContext, useAppContext }) => {
const modernjsConfig = useConfigContext();
setup: async (api) => {
const modernjsConfig = api.getConfig();
const mfConfig = await getMFConfig(userConfig.originPluginOptions);
const csrConfig =
userConfig.csrConfig || JSON.parse(JSON.stringify(mfConfig));
Expand All @@ -67,86 +67,84 @@ export const moduleFederationConfigPlugin = (
userConfig.ssrConfig = ssrConfig;
userConfig.csrConfig = csrConfig;

return {
config: async () => {
const bundlerType =
useAppContext().bundlerType === 'rspack' ? 'rspack' : 'webpack';
const ipv4 = getIPV4();
const enableSSR =
userConfig.userConfig?.ssr === false
? false
: Boolean(modernjsConfig?.server?.ssr);
api.config(() => {
const bundlerType =
api.getAppContext().bundlerType === 'rspack' ? 'rspack' : 'webpack';
const ipv4 = getIPV4();
const enableSSR =
userConfig.userConfig?.ssr === false
? false
: Boolean(modernjsConfig?.server?.ssr);

if (userConfig.remoteIpStrategy === undefined) {
if (!enableSSR) {
userConfig.remoteIpStrategy = 'inherit';
} else {
userConfig.remoteIpStrategy = 'ipv4';
}
if (userConfig.remoteIpStrategy === undefined) {
if (!enableSSR) {
userConfig.remoteIpStrategy = 'inherit';
} else {
userConfig.remoteIpStrategy = 'ipv4';
}
}

return {
tools: {
bundlerChain(chain, { isServer }) {
addMyTypes2Ignored(chain, isServer ? ssrConfig : csrConfig);
},
rspack(config, { isServer }) {
modifyBundlerConfig({
bundlerType,
mfConfig: isServer ? ssrConfig : csrConfig,
config,
isServer,
modernjsConfig,
remoteIpStrategy: userConfig.remoteIpStrategy,
});
userConfig.distOutputDir =
config.output?.path || path.resolve(process.cwd(), 'dist');
},
webpack(config, { isServer }) {
modifyBundlerConfig({
bundlerType,
mfConfig: isServer ? ssrConfig : csrConfig,
config,
isServer,
modernjsConfig,
remoteIpStrategy: userConfig.remoteIpStrategy,
});
return {
tools: {
bundlerChain(chain, { isServer }) {
addMyTypes2Ignored(chain, isServer ? ssrConfig : csrConfig);
},
rspack(config, { isServer }) {
modifyBundlerConfig({
bundlerType,
mfConfig: isServer ? ssrConfig : csrConfig,
config,
isServer,
modernjsConfig,
remoteIpStrategy: userConfig.remoteIpStrategy,
});
userConfig.distOutputDir =
config.output?.path || path.resolve(process.cwd(), 'dist');
},
webpack(config, { isServer }) {
modifyBundlerConfig({
bundlerType,
mfConfig: isServer ? ssrConfig : csrConfig,
config,
isServer,
modernjsConfig,
remoteIpStrategy: userConfig.remoteIpStrategy,
});

userConfig.distOutputDir =
config.output?.path || path.resolve(process.cwd(), 'dist');
},
devServer: {
headers: {
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Methods':
'GET, POST, PUT, DELETE, PATCH, OPTIONS',
'Access-Control-Allow-Headers': '*',
},
},
userConfig.distOutputDir =
config.output?.path || path.resolve(process.cwd(), 'dist');
},
source: {
alias: {
'@modern-js/runtime/mf': require.resolve(
'@module-federation/modern-js/runtime',
),
devServer: {
headers: {
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Methods':
'GET, POST, PUT, DELETE, PATCH, OPTIONS',
'Access-Control-Allow-Headers': '*',
},
define: {
FEDERATION_IPV4: JSON.stringify(ipv4),
REMOTE_IP_STRATEGY: JSON.stringify(userConfig.remoteIpStrategy),
},
enableAsyncEntry:
bundlerType === 'rspack'
? (modernjsConfig.source?.enableAsyncEntry ?? true)
: modernjsConfig.source?.enableAsyncEntry,
},
dev: {
assetPrefix: modernjsConfig?.dev?.assetPrefix
? modernjsConfig.dev.assetPrefix
: true,
},
source: {
alias: {
'@modern-js/runtime/mf': require.resolve(
'@module-federation/modern-js/runtime',
),
},
define: {
FEDERATION_IPV4: JSON.stringify(ipv4),
REMOTE_IP_STRATEGY: JSON.stringify(userConfig.remoteIpStrategy),
},
};
},
};
enableAsyncEntry:
bundlerType === 'rspack'
? (modernjsConfig.source?.enableAsyncEntry ?? true)
: modernjsConfig.source?.enableAsyncEntry,
},
dev: {
assetPrefix: modernjsConfig?.dev?.assetPrefix
? modernjsConfig.dev.assetPrefix
: true,
},
};
});
},
});

Expand Down
94 changes: 44 additions & 50 deletions packages/modernjs/src/cli/index.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import type { CliPlugin, AppTools } from '@modern-js/app-tools';
import type { CliPluginFuture, AppTools } from '@modern-js/app-tools';
import {
ModuleFederationPlugin as WebpackModuleFederationPlugin,
AsyncBoundaryPlugin,
Expand All @@ -12,7 +12,7 @@ import { WebpackPluginInstance } from '@rspack/core';

export const moduleFederationPlugin = (
userConfig: PluginOptions = {},
): CliPlugin<AppTools> => {
): CliPluginFuture<AppTools> => {
const internalModernPluginOptions: InternalModernPluginOptions = {
csrConfig: undefined,
ssrConfig: undefined,
Expand All @@ -25,55 +25,49 @@ export const moduleFederationPlugin = (
};
return {
name: '@modern-js/plugin-module-federation',
setup: async ({ useConfigContext }) => {
const modernjsConfig = useConfigContext();
return {
config: async () => {
return {
tools: {
rspack(config, { isServer }) {
const browserPluginOptions =
internalModernPluginOptions.csrConfig as MFPluginOptions.ModuleFederationPluginOptions;
if (!isServer) {
internalModernPluginOptions.browserPlugin =
new RspackModuleFederationPlugin(browserPluginOptions);
config.plugins?.push(
internalModernPluginOptions.browserPlugin,
);
}
},
webpack(config, { isServer }) {
const browserPluginOptions =
internalModernPluginOptions.csrConfig as MFPluginOptions.ModuleFederationPluginOptions;
if (!isServer) {
internalModernPluginOptions.browserPlugin =
new WebpackModuleFederationPlugin(browserPluginOptions);
config.plugins?.push(
internalModernPluginOptions.browserPlugin as WebpackPluginInstance,
);
}
const enableAsyncEntry =
modernjsConfig.source?.enableAsyncEntry;
if (!enableAsyncEntry && browserPluginOptions.async !== false) {
const asyncBoundaryPluginOptions =
typeof browserPluginOptions.async === 'object'
? browserPluginOptions.async
: {
eager: (module) =>
module &&
/\.federation/.test(module?.request || ''),
excludeChunk: (chunk) =>
chunk.name === browserPluginOptions.name,
};
config.plugins?.push(
new AsyncBoundaryPlugin(asyncBoundaryPluginOptions) as any,
);
}
},
setup: async (api) => {
const modernjsConfig = api.getConfig();
api.config(() => {
return {
tools: {
rspack(config, { isServer }) {
const browserPluginOptions =
internalModernPluginOptions.csrConfig as MFPluginOptions.ModuleFederationPluginOptions;
if (!isServer) {
internalModernPluginOptions.browserPlugin =
new RspackModuleFederationPlugin(browserPluginOptions);
config.plugins?.push(internalModernPluginOptions.browserPlugin);
}
},
};
},
};
webpack(config, { isServer }) {
const browserPluginOptions =
internalModernPluginOptions.csrConfig as MFPluginOptions.ModuleFederationPluginOptions;
if (!isServer) {
internalModernPluginOptions.browserPlugin =
new WebpackModuleFederationPlugin(browserPluginOptions);
config.plugins?.push(
internalModernPluginOptions.browserPlugin as WebpackPluginInstance,
);
}
const enableAsyncEntry = modernjsConfig.source?.enableAsyncEntry;
if (!enableAsyncEntry && browserPluginOptions.async !== false) {
const asyncBoundaryPluginOptions =
typeof browserPluginOptions.async === 'object'
? browserPluginOptions.async
: {
eager: (module) =>
module && /\.federation/.test(module?.request || ''),
excludeChunk: (chunk) =>
chunk.name === browserPluginOptions.name,
};
config.plugins?.push(
new AsyncBoundaryPlugin(asyncBoundaryPluginOptions) as any,
);
}
},
},
};
});
},
usePlugins: [
moduleFederationConfigPlugin(internalModernPluginOptions),
Expand Down
Loading

0 comments on commit 0d704f8

Please # to comment.