Skip to content

Commit 6db19eb

Browse files
Apollo rspack federation (#3814)
* node runtime plugin rspack * test ecosystem update * test ecosystem update * test ecosystem update * test ecosystem update * locks * feaT: rspack node runtime plugin * locks * imple * locks * chore: test node federation still works with old configs * chore: Apollo Rspack Federation * chore: Apollo Rspack Federation * chore: Apollo Rspack Federation * chore: Apollo Rspack Federation * chore: Apollo Rspack Federation * chore: Apollo Rspack Federation * chore: Apollo Rspack Federation * chore: update mf ecosystem --------- Co-authored-by: ScriptedAlchemy <[email protected]>
1 parent a545707 commit 6db19eb

16 files changed

+369
-60
lines changed

apollo-client/app1/config/module-federation.js

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,14 @@
11
const deps = require('../package.json').dependencies;
2-
const { UniversalFederationPlugin } = require('@module-federation/node');
2+
const { ModuleFederationPlugin } = require('@module-federation/enhanced');
3+
const rspack = require('@rspack/core')
34

4-
module.exports = {
5-
client: new UniversalFederationPlugin({
5+
module.exports = (FederationPlugin)=> {
6+
// let FederationPlugin;
7+
// if(type === 'rspack') {
8+
// FederationPlugin = rspack.container.ModuleFederationPlugin
9+
// } else if(type === 'uni')
10+
return {
11+
client: new FederationPlugin({
612
remoteType: 'script',
713
name: 'app1',
814
filename: 'remoteEntry.js',
@@ -24,16 +30,19 @@ module.exports = {
2430
},
2531
],
2632
}),
27-
server: [
28-
new UniversalFederationPlugin({
33+
server
34+
:
35+
[
36+
new FederationPlugin({
2937
remoteType: 'script',
30-
isServer:true,
38+
isServer: true,
3139
name: 'app1',
32-
library: { type: 'commonjs-module' },
40+
library: {type: 'commonjs-module'},
3341
filename: 'remoteEntry.js',
3442
remotes: {
3543
app2: 'app2@http://localhost:3001/server/remoteEntry.js',
3644
},
45+
runtimePlugins: [require.resolve('@module-federation/node/runtimePlugin')],
3746
shared: [
3847
{
3948
react: {requiredVersion: deps.react, eager: true},
@@ -49,5 +58,6 @@ module.exports = {
4958
},
5059
],
5160
}),
52-
],
53-
};
61+
]
62+
}
63+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
const path = require('path');
2+
const { merge } = require('webpack-merge');
3+
const shared = require('./webpack.shared');
4+
const rspack = require('@rspack/core')
5+
const moduleFederationPlugin = require('./module-federation');
6+
7+
/**
8+
* @type {import('webpack').Configuration}
9+
**/
10+
const webpackConfig = {
11+
name: 'client',
12+
target: 'web',
13+
entry: ['@babel/polyfill', path.resolve(__dirname, '../src/client/index')],
14+
mode: 'production',
15+
devtool: 'source-map',
16+
output: {
17+
path: path.resolve(__dirname, '../dist/client'),
18+
filename: '[name].js',
19+
chunkFilename: '[name].js',
20+
publicPath: 'http://localhost:3000/static/',
21+
},
22+
plugins: [moduleFederationPlugin(rspack.container.ModuleFederationPlugin).client],
23+
};
24+
25+
module.exports = merge(shared, webpackConfig);
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
const path = require('path');
2+
const { merge } = require('webpack-merge');
3+
const shared = require('./webpack.shared');
4+
const moduleFederationPlugin = require('./module-federation');
5+
const rspack = require('@rspack/core');
6+
7+
/**
8+
* @type {import('webpack').Configuration}
9+
**/
10+
const webpackConfig = {
11+
name: 'server',
12+
target: 'async-node',
13+
entry: ['@babel/polyfill', path.resolve(__dirname, '../src/server/index')],
14+
output: {
15+
path: path.resolve(__dirname, '../dist/server'),
16+
filename: '[name].js',
17+
libraryTarget: 'commonjs-module',
18+
},
19+
externals: ['express'],
20+
mode: 'production',
21+
plugins: [...moduleFederationPlugin(rspack.container.ModuleFederationPlugin).server],
22+
stats: {
23+
colors: true,
24+
},
25+
};
26+
27+
module.exports = merge(shared, webpackConfig);

apollo-client/app1/config/webpack.client.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ const path = require('path');
22
const { merge } = require('webpack-merge');
33
const shared = require('./webpack.shared');
44
const moduleFederationPlugin = require('./module-federation');
5+
const { ModuleFederationPlugin } = require('@module-federation/enhanced');
56

67
/**
78
* @type {import('webpack').Configuration}
@@ -18,7 +19,7 @@ const webpackConfig = {
1819
chunkFilename: '[name].js',
1920
publicPath: 'http://localhost:3000/static/',
2021
},
21-
plugins: [moduleFederationPlugin.client],
22+
plugins: [moduleFederationPlugin(ModuleFederationPlugin).client],
2223
};
2324

2425
module.exports = merge(shared, webpackConfig);

apollo-client/app1/config/webpack.server.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,14 @@ const path = require('path');
22
const { merge } = require('webpack-merge');
33
const shared = require('./webpack.shared');
44
const moduleFederationPlugin = require('./module-federation');
5+
const { UniversalFederationPlugin } = require('@module-federation/node');
56

67
/**
78
* @type {import('webpack').Configuration}
89
**/
910
const webpackConfig = {
1011
name: 'server',
11-
target: false,
12+
target: 'async-node',
1213
entry: ['@babel/polyfill', path.resolve(__dirname, '../src/server/index')],
1314
output: {
1415
path: path.resolve(__dirname, '../dist/server'),
@@ -17,7 +18,7 @@ const webpackConfig = {
1718
},
1819
externals: ['express'],
1920
mode: 'production',
20-
plugins: [...moduleFederationPlugin.server],
21+
plugins: [...moduleFederationPlugin(UniversalFederationPlugin).server],
2122
stats: {
2223
colors: true,
2324
},

apollo-client/app1/package.json

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,14 @@
22
"name": "apollo-client_app1",
33
"version": "0.0.0",
44
"scripts": {
5-
"start": "pnpm build && pnpm serve",
5+
"legacy:start": "pnpm legacy:build && pnpm serve",
66
"serve": "node dist/server/main.js",
7+
"legacy:build": "pnpm build:server:legacy && pnpm build:client:legacy",
78
"build": "pnpm build:server && pnpm build:client",
8-
"build:client": "rimraf dist/client && webpack --mode production --progress --config config/webpack.client.js",
9-
"build:server": "rimraf dist/server && webpack --mode production --progress --config config/webpack.server.js"
9+
"build:client:legacy": "rimraf dist/client && webpack --mode production --progress --config config/webpack.client.js",
10+
"build:client": "rimraf dist/client && rspack --mode production --config config/rspack.client.js",
11+
"build:server:legacy": "rimraf dist/server && webpack --mode production --progress --config config/webpack.server.js",
12+
"build:server": "rimraf dist/server && rspack --mode production --config config/rspack.server.js"
1013
},
1114
"dependencies": {
1215
"@apollo/client": "^3.7.1",
@@ -37,6 +40,9 @@
3740
"rimraf": "5.0.5",
3841
"webpack": "^5.91.0",
3942
"webpack-cli": "4.9.2",
40-
"webpack-merge": "5.10.0"
43+
"webpack-merge": "5.10.0",
44+
"@rspack/core": "^0.6.2",
45+
"@rspack/cli": "^0.6.2",
46+
"@rspack/dev-server": "^0.6.2"
4147
}
4248
}
Lines changed: 32 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,10 @@
11
const deps = require('../package.json').dependencies;
2-
const { UniversalFederationPlugin } = require('@module-federation/node');
32

4-
module.exports = {
5-
client: new UniversalFederationPlugin({
6-
remoteType: 'script',
7-
name: 'app2',
8-
filename: 'remoteEntry.js',
9-
exposes: {
10-
'./PokemonList': './src/client/components/PokemonList',
11-
},
12-
remotes: {},
13-
shared: [
14-
{
15-
react: deps.react,
16-
'react-dom': deps['react-dom'],
17-
graphql: deps.graphql,
18-
'@apollo/client': {
19-
singleton: true,
20-
requiredVersion: deps['@apollo/client'],
21-
},
22-
'node-fetch': deps['node-fetch'],
23-
'serialize-javascript': deps['serialize-javascript'],
24-
},
25-
],
26-
}),
27-
server: [
28-
new UniversalFederationPlugin({
3+
module.exports = (FederationPlugin) => {
4+
return {
5+
client: new FederationPlugin({
296
remoteType: 'script',
30-
isServer:true,
317
name: 'app2',
32-
library: { type: 'commonjs-module' },
338
filename: 'remoteEntry.js',
349
exposes: {
3510
'./PokemonList': './src/client/components/PokemonList',
@@ -48,6 +23,33 @@ module.exports = {
4823
'serialize-javascript': deps['serialize-javascript'],
4924
},
5025
],
51-
})
52-
],
26+
}),
27+
server: [
28+
new FederationPlugin({
29+
remoteType: 'script',
30+
isServer: true,
31+
runtimePlugins:[require.resolve('@module-federation/node/runtimePlugin')],
32+
name: 'app2',
33+
library: {type: 'commonjs-module'},
34+
filename: 'remoteEntry.js',
35+
exposes: {
36+
'./PokemonList': './src/client/components/PokemonList',
37+
},
38+
remotes: {},
39+
shared: [
40+
{
41+
react: deps.react,
42+
'react-dom': deps['react-dom'],
43+
graphql: deps.graphql,
44+
'@apollo/client': {
45+
singleton: true,
46+
requiredVersion: deps['@apollo/client'],
47+
},
48+
'node-fetch': deps['node-fetch'],
49+
'serialize-javascript': deps['serialize-javascript'],
50+
},
51+
],
52+
})
53+
],
54+
}
5355
};
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
const path = require('path');
2+
const { merge } = require('webpack-merge');
3+
const shared = require('./webpack.shared');
4+
const rspack = require('@rspack/core')
5+
const moduleFederationPlugin = require('./module-federation');
6+
7+
/**
8+
* @type {import('webpack').Configuration}
9+
**/
10+
const webpackConfig = {
11+
name: 'client',
12+
target: 'web',
13+
entry: ['@babel/polyfill', path.resolve(__dirname, '../src/client/index')],
14+
mode: 'production',
15+
devtool: 'source-map',
16+
output: {
17+
path: path.resolve(__dirname, '../dist/client'),
18+
filename: '[name].js',
19+
chunkFilename: '[name].js',
20+
publicPath: 'http://localhost:3001/static/',
21+
},
22+
plugins: [moduleFederationPlugin(rspack.container.ModuleFederationPlugin).client],
23+
};
24+
25+
module.exports = merge(shared, webpackConfig);
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
const path = require('path');
2+
const { merge } = require('webpack-merge');
3+
const shared = require('./webpack.shared');
4+
const moduleFederationPlugin = require('./module-federation');
5+
const rspack = require('@rspack/core');
6+
7+
/**
8+
* @type {import('webpack').Configuration}
9+
**/
10+
const webpackConfig = {
11+
name: 'server',
12+
target: 'async-node',
13+
entry: ['@babel/polyfill', path.resolve(__dirname, '../src/server/index')],
14+
output: {
15+
path: path.resolve(__dirname, '../dist/server'),
16+
filename: '[name].js',
17+
libraryTarget: 'commonjs-module',
18+
},
19+
externals: ['express'],
20+
mode: 'production',
21+
plugins: [...moduleFederationPlugin(rspack.container.ModuleFederationPlugin).server],
22+
stats: {
23+
colors: true,
24+
},
25+
};
26+
27+
module.exports = merge(shared, webpackConfig);

apollo-client/app2/config/webpack.client.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ const path = require('path');
22
const { merge } = require('webpack-merge');
33
const shared = require('./webpack.shared');
44
const moduleFederationPlugin = require('./module-federation');
5+
const { ModuleFederationPlugin } = require('@module-federation/enhanced');
56

67
/**
78
* @type {import('webpack').Configuration}
@@ -18,7 +19,7 @@ const webpackConfig = {
1819
chunkFilename: '[name].js',
1920
publicPath: 'http://localhost:3001/static/',
2021
},
21-
plugins: [moduleFederationPlugin.client],
22+
plugins: [moduleFederationPlugin(ModuleFederationPlugin).client],
2223
};
2324

2425
module.exports = merge(shared, webpackConfig);

apollo-client/app2/config/webpack.server.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,21 +2,23 @@ const path = require('path');
22
const { merge } = require('webpack-merge');
33
const shared = require('./webpack.shared');
44
const moduleFederationPlugin = require('./module-federation');
5+
const { UniversalFederationPlugin } = require('@module-federation/node');
56

67
/**
78
* @type {import('webpack').Configuration}
89
**/
910
const webpackConfig = {
1011
name: 'server',
11-
target: false,
12+
target: 'async-node',
1213
entry: ['@babel/polyfill', path.resolve(__dirname, '../src/server/index')],
1314
output: {
1415
path: path.resolve(__dirname, '../dist/server'),
1516
filename: '[name].js',
1617
libraryTarget: 'commonjs-module',
1718
},
19+
externals: ['express'],
1820
mode: 'production',
19-
plugins: [...moduleFederationPlugin.server],
21+
plugins: [...moduleFederationPlugin(UniversalFederationPlugin).server],
2022
stats: {
2123
colors: true,
2224
},

apollo-client/app2/package.json

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,14 @@
22
"name": "apollo-client_app2",
33
"version": "0.0.0",
44
"scripts": {
5-
"start": "pnpm build && pnpm serve",
5+
"legacy:start": "pnpm legacy:build && pnpm serve",
66
"serve": "node dist/server/main.js",
7+
"legacy:build": "pnpm build:server:legacy && pnpm build:client:legacy",
78
"build": "pnpm build:server && pnpm build:client",
8-
"build:client": "rimraf dist/client && webpack --mode production --progress --config config/webpack.client.js",
9-
"build:server": "rimraf dist/server && webpack --mode production --progress --config config/webpack.server.js"
9+
"build:client:legacy": "rimraf dist/client && webpack --mode production --progress --config config/webpack.client.js",
10+
"build:client": "rimraf dist/client && rspack --mode production --config config/rspack.client.js",
11+
"build:server:legacy": "rimraf dist/server && webpack --mode production --progress --config config/webpack.server.js",
12+
"build:server": "rimraf dist/server && rspack --mode production --config config/rspack.server.js"
1013
},
1114
"dependencies": {
1215
"@apollo/client": "^3.7.1",
@@ -37,6 +40,9 @@
3740
"rimraf": "5.0.5",
3841
"webpack": "^5.91.0",
3942
"webpack-cli": "4.9.2",
40-
"webpack-merge": "5.10.0"
43+
"webpack-merge": "5.10.0",
44+
"@rspack/core": "^0.6.2",
45+
"@rspack/cli": "^0.6.2",
46+
"@rspack/dev-server": "^0.6.2"
4147
}
4248
}

apollo-client/cypress.env.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
{
2+
"allure": true,
3+
"allureResultsPath": "../cypress-e2e/results/allure-results"
4+
}

0 commit comments

Comments
 (0)