Skip to content

Commit 0c68c2f

Browse files
authored
feat(modern-js-plugin): add server plugin to handle remote's SSR assets (#3777)
1 parent 1ee274e commit 0c68c2f

File tree

24 files changed

+2208
-3606
lines changed

24 files changed

+2208
-3606
lines changed

.changeset/spotty-ducks-look.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
---
2+
'create-module-federation': patch
3+
'@module-federation/devtools': patch
4+
'@module-federation/modern-js': patch
5+
'@module-federation/modernjsapp': patch
6+
'@module-federation/cli': patch
7+
---
8+
9+
feat(modern-js-plugin): add server plugin to handle remote's SSR assets

apps/modernjs-ssr/dynamic-nested-remote/package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,17 +26,17 @@
2626
],
2727
"dependencies": {
2828
"@babel/runtime": "7.26.0",
29-
"@modern-js/runtime": "2.65.1",
29+
"@modern-js/runtime": "2.67.6",
3030
"@module-federation/modern-js": "workspace:*",
3131
"antd": "4.24.15",
3232
"react": "~18.3.1",
3333
"react-dom": "~18.3.1"
3434
},
3535
"devDependencies": {
3636
"@modern-js-app/eslint-config": "2.59.0",
37-
"@modern-js/app-tools": "2.65.1",
37+
"@modern-js/app-tools": "2.67.6",
3838
"@modern-js/eslint-config": "2.59.0",
39-
"@modern-js/tsconfig": "2.65.1",
39+
"@modern-js/tsconfig": "2.67.6",
4040
"@types/jest": "~29.5.0",
4141
"@types/node": "~16.11.7",
4242
"@types/react": "~18.2.0",

apps/modernjs-ssr/dynamic-remote-new-version/package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,17 +26,17 @@
2626
],
2727
"dependencies": {
2828
"@babel/runtime": "7.26.0",
29-
"@modern-js/runtime": "2.65.1",
29+
"@modern-js/runtime": "2.67.6",
3030
"@module-federation/modern-js": "workspace:*",
3131
"antd": "4.24.15",
3232
"react": "~18.3.1",
3333
"react-dom": "~18.3.1"
3434
},
3535
"devDependencies": {
3636
"@modern-js-app/eslint-config": "2.59.0",
37-
"@modern-js/app-tools": "2.65.1",
37+
"@modern-js/app-tools": "2.67.6",
3838
"@modern-js/eslint-config": "2.59.0",
39-
"@modern-js/tsconfig": "2.65.1",
39+
"@modern-js/tsconfig": "2.67.6",
4040
"@types/jest": "~29.5.0",
4141
"@types/node": "~16.11.7",
4242
"@types/react": "~18.2.0",

apps/modernjs-ssr/dynamic-remote/package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,17 +26,17 @@
2626
],
2727
"dependencies": {
2828
"@babel/runtime": "7.26.0",
29-
"@modern-js/runtime": "2.65.1",
29+
"@modern-js/runtime": "2.67.6",
3030
"@module-federation/modern-js": "workspace:*",
3131
"antd": "4.24.15",
3232
"react": "~18.3.1",
3333
"react-dom": "~18.3.1"
3434
},
3535
"devDependencies": {
3636
"@modern-js-app/eslint-config": "2.59.0",
37-
"@modern-js/app-tools": "2.65.1",
37+
"@modern-js/app-tools": "2.67.6",
3838
"@modern-js/eslint-config": "2.59.0",
39-
"@modern-js/tsconfig": "2.65.1",
39+
"@modern-js/tsconfig": "2.67.6",
4040
"@types/jest": "~29.5.0",
4141
"@types/node": "~16.11.7",
4242
"@types/react": "~18.2.0",

apps/modernjs-ssr/host/package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,17 +26,17 @@
2626
],
2727
"dependencies": {
2828
"@babel/runtime": "7.26.0",
29-
"@modern-js/runtime": "2.65.1",
29+
"@modern-js/runtime": "2.67.6",
3030
"@module-federation/modern-js": "workspace:*",
3131
"antd": "4.24.15",
3232
"react": "~18.3.1",
3333
"react-dom": "~18.3.1"
3434
},
3535
"devDependencies": {
3636
"@modern-js-app/eslint-config": "2.59.0",
37-
"@modern-js/app-tools": "2.65.1",
37+
"@modern-js/app-tools": "2.67.6",
3838
"@modern-js/eslint-config": "2.59.0",
39-
"@modern-js/tsconfig": "2.65.1",
39+
"@modern-js/tsconfig": "2.67.6",
4040
"@types/jest": "~29.5.0",
4141
"@types/node": "~16.11.7",
4242
"@types/react": "~18.2.0",

apps/modernjs-ssr/nested-remote/package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,17 +26,17 @@
2626
],
2727
"dependencies": {
2828
"@babel/runtime": "7.26.0",
29-
"@modern-js/runtime": "2.65.1",
29+
"@modern-js/runtime": "2.67.6",
3030
"@module-federation/modern-js": "workspace:*",
3131
"antd": "4.24.15",
3232
"react": "~18.3.1",
3333
"react-dom": "~18.3.1"
3434
},
3535
"devDependencies": {
3636
"@modern-js-app/eslint-config": "2.59.0",
37-
"@modern-js/app-tools": "2.65.1",
37+
"@modern-js/app-tools": "2.67.6",
3838
"@modern-js/eslint-config": "2.59.0",
39-
"@modern-js/tsconfig": "2.65.1",
39+
"@modern-js/tsconfig": "2.67.6",
4040
"@types/jest": "~29.5.0",
4141
"@types/node": "~16.11.7",
4242
"@types/react": "~18.2.0",

apps/modernjs-ssr/remote-new-version/package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,17 +26,17 @@
2626
],
2727
"dependencies": {
2828
"@babel/runtime": "7.26.0",
29-
"@modern-js/runtime": "2.65.1",
29+
"@modern-js/runtime": "2.67.6",
3030
"@module-federation/modern-js": "workspace:*",
3131
"antd": "4.24.15",
3232
"react": "~18.3.1",
3333
"react-dom": "~18.3.1"
3434
},
3535
"devDependencies": {
3636
"@modern-js-app/eslint-config": "2.59.0",
37-
"@modern-js/app-tools": "2.65.1",
37+
"@modern-js/app-tools": "2.67.6",
3838
"@modern-js/eslint-config": "2.59.0",
39-
"@modern-js/tsconfig": "2.65.1",
39+
"@modern-js/tsconfig": "2.67.6",
4040
"@types/jest": "~29.5.0",
4141
"@types/node": "~16.11.7",
4242
"@types/react": "~18.2.0",

apps/modernjs-ssr/remote/modern.config.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@ export default defineConfig({
66
dev: {
77
port: 3051,
88
},
9+
output: {
10+
assetPrefix: 'http://localhost:8080',
11+
},
912
runtime: {
1013
router: true,
1114
},

apps/modernjs-ssr/remote/module-federation.config.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
import { createModuleFederationConfig } from '@module-federation/modern-js';
22
export default createModuleFederationConfig({
33
name: 'remote',
4-
filename: 'remoteEntry.js',
4+
manifest: {
5+
filePath: 'static',
6+
},
7+
filename: 'static/remoteEntry.js',
58
exposes: {
69
'./Image': './src/components/Image.tsx',
710
'./Button': './src/components/Button.tsx',

apps/modernjs-ssr/remote/package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,17 +26,17 @@
2626
],
2727
"dependencies": {
2828
"@babel/runtime": "7.26.0",
29-
"@modern-js/runtime": "2.65.1",
29+
"@modern-js/runtime": "2.67.6",
3030
"@module-federation/modern-js": "workspace:*",
3131
"antd": "4.24.15",
3232
"react": "~18.3.1",
3333
"react-dom": "~18.3.1"
3434
},
3535
"devDependencies": {
3636
"@modern-js-app/eslint-config": "2.59.0",
37-
"@modern-js/app-tools": "2.65.1",
37+
"@modern-js/app-tools": "2.67.6",
3838
"@modern-js/eslint-config": "2.59.0",
39-
"@modern-js/tsconfig": "2.65.1",
39+
"@modern-js/tsconfig": "2.67.6",
4040
"@types/jest": "~29.5.0",
4141
"@types/node": "~16.11.7",
4242
"@types/react": "~18.2.0",

apps/modernjs/package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,16 +26,16 @@
2626
],
2727
"dependencies": {
2828
"@babel/runtime": "7.26.0",
29-
"@modern-js/runtime": "2.65.1",
29+
"@modern-js/runtime": "2.67.6",
3030
"@module-federation/enhanced": "workspace:*",
3131
"react": "18.3.1",
3232
"react-dom": "18.3.1"
3333
},
3434
"devDependencies": {
3535
"@modern-js-app/eslint-config": "2.59.0",
36-
"@modern-js/app-tools": "2.65.1",
36+
"@modern-js/app-tools": "2.67.6",
3737
"@modern-js/eslint-config": "2.59.0",
38-
"@modern-js/tsconfig": "2.65.1",
38+
"@modern-js/tsconfig": "2.67.6",
3939
"@types/jest": "~29.5.0",
4040
"@types/node": "~20.12.12",
4141
"@types/react": "~18.2.0",

packages/chrome-devtools/package.json

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -11,18 +11,16 @@
1111
"build:storybook": "storybook build",
1212
"storybook": "storybook dev -p 6006",
1313
"reset": "npx rimraf ./**/node_modules",
14-
"dev": "modern dev",
15-
"build": "modern build && node postpack.js",
16-
"build:debug": "DEBUG=true modern build && node postpack.js",
14+
"dev": "modern-app dev",
15+
"build": "modern-app build && node postpack.js",
16+
"build:debug": "DEBUG=true modern-app build && node postpack.js",
1717
"build:lib": "rm -rf dist && modern-module build -c modern.lib.config.ts",
1818
"release": "npm publish --tag canary",
1919
"test": "vitest run",
2020
"test:e2e": "E2ETEST=true pnpm build && playwright test",
2121
"test:e2e:ui": "E2ETEST=true pnpm build && playwright test --ui",
22-
"start": "modern start",
23-
"serve": "modern serve",
24-
"new": "modern new",
25-
"upgrade": "modern upgrade",
22+
"start": "modern-app start",
23+
"serve": "modern-app serve",
2624
"postinstall": "bash install-deps.bash"
2725
},
2826
"files": [
@@ -57,7 +55,7 @@
5755
},
5856
"dependencies": {
5957
"@arco-design/web-react": "^2.64.1",
60-
"@modern-js/runtime": "2.65.1",
58+
"@modern-js/runtime": "2.67.6",
6159
"@module-federation/sdk": "workspace:*",
6260
"ahooks": "^3.7.10",
6361
"dagre": "^0.8.5",
@@ -67,12 +65,11 @@
6765
},
6866
"devDependencies": {
6967
"@modern-js-app/eslint-config": "2.54.6",
70-
"@modern-js/app-tools": "2.65.1",
71-
"@modern-js/builder-webpack-provider": "2.46.1",
68+
"@modern-js/app-tools": "2.67.6",
7269
"@modern-js/eslint-config": "2.59.0",
73-
"@modern-js/module-tools": "2.65.1",
74-
"@modern-js/storybook": "2.65.1",
75-
"@modern-js/tsconfig": "2.65.1",
70+
"@modern-js/module-tools": "2.67.6",
71+
"@modern-js/storybook": "2.67.6",
72+
"@modern-js/tsconfig": "2.67.6",
7673
"@module-federation/runtime": "workspace:*",
7774
"@playwright/test": "1.49.1",
7875
"@storybook/addon-essentials": "^8",

packages/cli/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
"@module-federation/dts-plugin": "workspace:*",
2727
"commander": "11.1.0",
2828
"chalk": "3.0.0",
29-
"@modern-js/node-bundle-require": "2.65.1"
29+
"@modern-js/node-bundle-require": "2.67.6"
3030
},
3131
"devDependencies": {
3232
"@types/node": "~16.11.7"

packages/create-module-federation/templates/modern-common/package.json.handlebars

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,13 @@
2424
"pre-commit": "npx lint-staged"
2525
},
2626
"dependencies": {
27-
"@modern-js/runtime": "^2.65.1",
27+
"@modern-js/runtime": "^2.67.6",
2828
"react": "^18.3.1",
2929
"react-dom": "^18.3.1"
3030
},
3131
"devDependencies": {
32-
"@modern-js/app-tools": "^2.65.1",
33-
"@modern-js/tsconfig": "^2.65.1",
32+
"@modern-js/app-tools": "^2.67.6",
33+
"@modern-js/tsconfig": "^2.67.6",
3434
"@biomejs/biome": "1.8.3",
3535
"typescript": "~5.0.4",
3636
"@types/jest": "~29.2.4",

packages/modernjs/package.json

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,10 @@
5555
"types": "./dist/types/cli/mfRuntimePlugins/inject-node-fetch.d.ts",
5656
"import": "./dist/esm/cli/mfRuntimePlugins/inject-node-fetch.js",
5757
"require": "./dist/esm/cli/mfRuntimePlugins/inject-node-fetch.js"
58+
},
59+
"./server": {
60+
"types": "./dist/types/server/index.d.ts",
61+
"default": "./dist/cjs/server/index.js"
5862
}
5963
},
6064
"typesVersions": {
@@ -79,6 +83,9 @@
7983
],
8084
"inject-node-fetch": [
8185
"./dist/types/cli/mfRuntimePlugins/inject-node-fetch.d.ts"
86+
],
87+
"server": [
88+
"./dist/types/server/index.d.ts"
8289
]
8390
}
8491
},
@@ -87,9 +94,10 @@
8794
"author": "hanric <hanric.zhang@gmail.com>",
8895
"license": "MIT",
8996
"dependencies": {
90-
"@modern-js/node-bundle-require": "2.65.1",
97+
"@modern-js/node-bundle-require": "2.67.6",
9198
"@module-federation/rsbuild-plugin": "workspace:*",
92-
"@modern-js/utils": "2.65.1",
99+
"fs-extra": "11.3.0",
100+
"lru-cache": "11.1.0",
93101
"@module-federation/enhanced": "workspace:*",
94102
"@module-federation/node": "workspace:*",
95103
"@module-federation/sdk": "workspace:*",
@@ -100,11 +108,11 @@
100108
},
101109
"devDependencies": {
102110
"@rsbuild/core": "1.2.8",
103-
"@modern-js/app-tools": "2.65.1",
104-
"@modern-js/core": "2.65.1",
105-
"@modern-js/module-tools": "2.65.1",
106-
"@modern-js/runtime": "2.65.1",
107-
"@modern-js/tsconfig": "2.65.1",
111+
"@modern-js/app-tools": "2.67.6",
112+
"@modern-js/server-runtime": "2.67.6",
113+
"@modern-js/module-tools": "2.67.6",
114+
"@modern-js/runtime": "2.67.6",
115+
"@modern-js/tsconfig": "2.67.6",
108116
"@module-federation/manifest": "workspace:*"
109117
},
110118
"peerDependencies": {

packages/modernjs/src/cli/index.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,13 @@ export const moduleFederationPlugin = (
6666
}
6767
}
6868
});
69+
70+
api._internalServerPlugins(({ plugins }) => {
71+
plugins.push({
72+
name: '@module-federation/modern-js/server',
73+
});
74+
return { plugins };
75+
});
6976
},
7077
usePlugins: [
7178
moduleFederationConfigPlugin(internalModernPluginOptions),

packages/modernjs/src/cli/manifest.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import path from 'path';
22
import { Stats, Manifest } from '@module-federation/sdk';
3-
import { fs } from '@modern-js/utils';
3+
import fs from 'fs-extra';
44
import { BundlerPlugin } from '../types';
55

66
function mergeStats(browserStats: Stats, nodeStats: Stats): Stats {

packages/modernjs/src/cli/ssrPlugin.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import path from 'path';
2-
import { fs } from '@modern-js/utils';
2+
import fs from 'fs-extra';
33
import { ModuleFederationPlugin } from '@module-federation/enhanced/webpack';
44
import { ModuleFederationPlugin as RspackModuleFederationPlugin } from '@module-federation/enhanced/rspack';
55
import UniverseEntryChunkTrackerPlugin from '@module-federation/node/universe-entry-chunk-tracker-plugin';
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
import { it, expect, describe, vi, beforeAll } from 'vitest';
2+
import { FileCache } from './fileCache';
3+
4+
beforeAll(() => {
5+
vi.mock('fs-extra', () => ({
6+
default: {
7+
pathExists: () => {
8+
return true;
9+
},
10+
lstat: () => {
11+
return {
12+
mtimeMs: Date.now(),
13+
size: 4,
14+
};
15+
},
16+
readFile: () => {
17+
return 'test';
18+
},
19+
},
20+
}));
21+
});
22+
23+
describe('modern serve static file cache', async () => {
24+
it('should cache file', async () => {
25+
const cache = new FileCache();
26+
const result = await cache.getFile('test.txt');
27+
expect(result?.content).toBe('test');
28+
});
29+
});

0 commit comments

Comments
 (0)