@module-federation/node 2.0.1 → 2.0.2-beta.0
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/CHANGELOG.md +29 -0
- package/README.md +27 -0
- package/jest.config.d.ts +11 -0
- package/jest.config.js +19 -0
- package/jest.config.js.map +1 -0
- package/package.json +3 -2
- package/src/filesystem/DynamicFilesystemRuntimeModule.d.ts +6 -0
- package/src/filesystem/DynamicFilesystemRuntimeModule.js +30 -0
- package/src/filesystem/DynamicFilesystemRuntimeModule.js.map +1 -0
- package/src/filesystem/stratagies.d.ts +11 -0
- package/src/filesystem/stratagies.js +105 -0
- package/src/filesystem/stratagies.js.map +1 -0
- package/src/plugins/CommonJsChunkLoadingPlugin.js +29 -2
- package/src/plugins/CommonJsChunkLoadingPlugin.js.map +1 -1
- package/src/plugins/{LoadFileChunkLoadingRuntimeModule.d.ts → DynamicFilesystemChunkLoadingRuntimeModule.d.ts} +8 -4
- package/src/plugins/DynamicFilesystemChunkLoadingRuntimeModule.js +145 -0
- package/src/plugins/DynamicFilesystemChunkLoadingRuntimeModule.js.map +1 -0
- package/src/plugins/FederationModuleInfoRuntimeModule.d.ts +9 -0
- package/src/plugins/FederationModuleInfoRuntimeModule.js +55 -0
- package/src/plugins/FederationModuleInfoRuntimeModule.js.map +1 -0
- package/src/plugins/NodeFederationPlugin.d.ts +18 -25
- package/src/plugins/NodeFederationPlugin.js +41 -102
- package/src/plugins/NodeFederationPlugin.js.map +1 -1
- package/src/plugins/RemotePublicPathRuntimeModule.d.ts +10 -0
- package/src/plugins/RemotePublicPathRuntimeModule.js +86 -0
- package/src/plugins/RemotePublicPathRuntimeModule.js.map +1 -0
- package/src/plugins/StreamingTargetPlugin.js +6 -7
- package/src/plugins/StreamingTargetPlugin.js.map +1 -1
- package/src/plugins/UniversalFederationPlugin.js +2 -1
- package/src/plugins/UniversalFederationPlugin.js.map +1 -1
- package/src/plugins/parts.d.ts +50 -0
- package/src/plugins/parts.js +316 -0
- package/src/plugins/parts.js.map +1 -0
- package/src/plugins/LoadFileChunkLoadingRuntimeModule.js +0 -434
- package/src/plugins/LoadFileChunkLoadingRuntimeModule.js.map +0 -1
- package/src/plugins/loadScript.d.ts +0 -7
- package/src/plugins/loadScript.js +0 -116
- package/src/plugins/loadScript.js.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,35 @@
|
|
|
2
2
|
|
|
3
3
|
This file was generated using [@jscutlery/semver](https://github.com/jscutlery/semver).
|
|
4
4
|
|
|
5
|
+
## [2.0.2-beta.0](https://github.com/module-federation/nextjs-mf/compare/node-2.0.1...node-2.0.2-beta.0) (2023-09-14)
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
### Bug Fixes
|
|
9
|
+
|
|
10
|
+
* import utils manually ([2767191](https://github.com/module-federation/nextjs-mf/commit/2767191467d9d685704b747d42b5f170da233847))
|
|
11
|
+
* **node:** use ES6 imports and override method in FederationModuleInfoRuntimeModule (#bytedance) ([d420ad9](https://github.com/module-federation/nextjs-mf/commit/d420ad94b7515123254af45c61704abcc0971511))
|
|
12
|
+
* remove ensure remote runtime module ([d06c082](https://github.com/module-federation/nextjs-mf/commit/d06c0823435063dcd277897ab551cd3a9c996d3d))
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
### Features
|
|
16
|
+
|
|
17
|
+
* add auto public path support for remote modules (node_auto_public_path) ([b12c984](https://github.com/module-federation/nextjs-mf/commit/b12c9841aa55027cb7b77e768ff9c0b456120d51))
|
|
18
|
+
* Dynamic Filesystem ([#1274](https://github.com/module-federation/nextjs-mf/issues/1274)) ([2bec98a](https://github.com/module-federation/nextjs-mf/commit/2bec98a2472b44898a7f14ec6868a2368cfb6d82))
|
|
19
|
+
* FederationModuleInfo Runtime Module ([50a1a0c](https://github.com/module-federation/nextjs-mf/commit/50a1a0c7a37bbe42ab6f2f5559b411567fee0fe9))
|
|
20
|
+
* FederationModuleInfo Runtime Module ([7b09ef6](https://github.com/module-federation/nextjs-mf/commit/7b09ef6c0f4ee68a1b5caa5f021632059c522b8f))
|
|
21
|
+
* implement Bytedance Infra Node Plugin ([82e6801](https://github.com/module-federation/nextjs-mf/commit/82e680157bbad68fa93800a69149c4c28652cfed))
|
|
22
|
+
* implement Bytedance Infra Node Plugin ([97f283e](https://github.com/module-federation/nextjs-mf/commit/97f283e4746bf6f048ee27584adde5249c8e577c))
|
|
23
|
+
* native self forming node federation ([#1291](https://github.com/module-federation/nextjs-mf/issues/1291)) ([1dd5ed1](https://github.com/module-federation/nextjs-mf/commit/1dd5ed17c981e036336925e807203e94b58c36d6))
|
|
24
|
+
* **node-remote:** Improve module federation runtime compatibility ([5eb2092](https://github.com/module-federation/nextjs-mf/commit/5eb209249c44d525c12eff5739bf23a93db08e4f))
|
|
25
|
+
* **node:** auto set public path and improve chunk loading strategy #node_auto_public_path ([65989da](https://github.com/module-federation/nextjs-mf/commit/65989dab95ee2acee7ec9a5ab321921a278cd078))
|
|
26
|
+
* **node:** enhance error handling and remote container registry in RemotePublicPathRuntimeModule (#bytedance) ([061285e](https://github.com/module-federation/nextjs-mf/commit/061285e0b6210baa1dd502dc94fd57fd9a8af822))
|
|
27
|
+
* **NodeFederationPlugin:** assign remoteContainerRegistry to importMetaName ([ca33d98](https://github.com/module-federation/nextjs-mf/commit/ca33d98df63fdb8dac402b1cc0ec8bf95f9f1971))
|
|
28
|
+
* **node:** remove unused import from DynamicFilesystemRuntimeModule ([f9787a9](https://github.com/module-federation/nextjs-mf/commit/f9787a9a67da936679db388e5c66e012e7452d8a))
|
|
29
|
+
* remove old loadScript hack ([fbe19bc](https://github.com/module-federation/nextjs-mf/commit/fbe19bc76694c14b6a95c577669c2e8656ede1ba))
|
|
30
|
+
* **utilities:** update DelegateModulesPlugin and tests (#node_auto_public_path) ([df8bb79](https://github.com/module-federation/nextjs-mf/commit/df8bb791c3fedef299cb15960546ff5ad9c665ef))
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
|
|
5
34
|
## [2.0.1](https://github.com/module-federation/nextjs-mf/compare/node-2.0.0...node-2.0.1) (2023-09-13)
|
|
6
35
|
|
|
7
36
|
### Dependency Updates
|
package/README.md
CHANGED
|
@@ -152,6 +152,33 @@ revalidate().then((shouldReload) => {
|
|
|
152
152
|
});
|
|
153
153
|
```
|
|
154
154
|
|
|
155
|
+
### Overrideing default http chunk fetch
|
|
156
|
+
|
|
157
|
+
```js
|
|
158
|
+
const chunkFetcher = globalThis.webpackChunkLoad || globalThis.fetch || fetchPolyfill;
|
|
159
|
+
// then it will pass one argument to the function, the url to fetch
|
|
160
|
+
|
|
161
|
+
chunkFetcher(url)
|
|
162
|
+
.then((res) => res.text())
|
|
163
|
+
.then((text) => {
|
|
164
|
+
// do something with the text
|
|
165
|
+
});
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
if you want to use your own custom fetch, or add fetch headers, either in the entrypoint of webpack or outside
|
|
169
|
+
of webpack scope, like in express server- you can override the default chunk fetcher by setting the globalThis.webpackChunkLoad variable.
|
|
170
|
+
|
|
171
|
+
```js
|
|
172
|
+
globalThis.webpackChunkLoad = async (url) => {
|
|
173
|
+
const res = await fetch(url, {
|
|
174
|
+
headers: {
|
|
175
|
+
'x-custom-header': 'custom-header-value',
|
|
176
|
+
},
|
|
177
|
+
});
|
|
178
|
+
return res.text();
|
|
179
|
+
};
|
|
180
|
+
```
|
|
181
|
+
|
|
155
182
|
## 🔑 License
|
|
156
183
|
|
|
157
184
|
- MIT @[ScriptedAlchemy](https://github.com/ScriptedAlchemy)
|
package/jest.config.d.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export let displayName: string;
|
|
2
|
+
export let preset: string;
|
|
3
|
+
export let globals: {};
|
|
4
|
+
export let testEnvironment: string;
|
|
5
|
+
export let transform: {
|
|
6
|
+
'^.+\\.[tj]s$': (string | {
|
|
7
|
+
tsconfig: string;
|
|
8
|
+
})[];
|
|
9
|
+
};
|
|
10
|
+
export let moduleFileExtensions: string[];
|
|
11
|
+
export let coverageDirectory: string;
|
package/jest.config.js
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/* eslint-disable */
|
|
3
|
+
module.exports = {
|
|
4
|
+
displayName: 'node',
|
|
5
|
+
preset: '../../jest.preset.js',
|
|
6
|
+
globals: {},
|
|
7
|
+
testEnvironment: 'node',
|
|
8
|
+
transform: {
|
|
9
|
+
'^.+\\.[tj]s$': [
|
|
10
|
+
'ts-jest',
|
|
11
|
+
{
|
|
12
|
+
tsconfig: '<rootDir>/tsconfig.spec.json',
|
|
13
|
+
},
|
|
14
|
+
],
|
|
15
|
+
},
|
|
16
|
+
moduleFileExtensions: ['ts', 'js', 'html'],
|
|
17
|
+
coverageDirectory: '../../coverage/packages/node',
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=jest.config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jest.config.js","sourceRoot":"","sources":["../../../packages/node/jest.config.js"],"names":[],"mappings":";AAAA,oBAAoB;AACpB,MAAM,CAAC,OAAO,GAAG;IACf,WAAW,EAAE,MAAM;IACnB,MAAM,EAAE,sBAAsB;IAC9B,OAAO,EAAE,EAAE;IACX,eAAe,EAAE,MAAM;IACvB,SAAS,EAAE;QACT,cAAc,EAAE;YACd,SAAS;YACT;gBACE,QAAQ,EAAE,8BAA8B;aACzC;SACF;KACF;IACD,oBAAoB,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC;IAC1C,iBAAiB,EAAE,8BAA8B;CAClD,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"public": true,
|
|
3
3
|
"name": "@module-federation/node",
|
|
4
|
-
"version": "2.0.
|
|
4
|
+
"version": "2.0.2-beta.0",
|
|
5
5
|
"type": "commonjs",
|
|
6
6
|
"main": "./src/index.js",
|
|
7
7
|
"exports": {
|
|
@@ -34,7 +34,8 @@
|
|
|
34
34
|
"license": "MIT",
|
|
35
35
|
"dependencies": {
|
|
36
36
|
"node-fetch": "^2.6.7",
|
|
37
|
-
"encoding": "^0.1.13"
|
|
37
|
+
"encoding": "^0.1.13",
|
|
38
|
+
"@module-federation/utilities": "3.0.2-beta.0"
|
|
38
39
|
},
|
|
39
40
|
"peerDependencies": {
|
|
40
41
|
"webpack": "^5.40.0",
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const { RuntimeModule, Template } = require('webpack');
|
|
4
|
+
const stratagies_1 = require("./stratagies");
|
|
5
|
+
class FileSystemRunInContextStrategyRuntimeModule extends RuntimeModule {
|
|
6
|
+
constructor() {
|
|
7
|
+
super('dynamic-file-system', RuntimeModule.STAGE_BASIC);
|
|
8
|
+
}
|
|
9
|
+
generate() {
|
|
10
|
+
return Template.asString([
|
|
11
|
+
stratagies_1.fileSystemRunInContextStrategy.toString(),
|
|
12
|
+
stratagies_1.httpEvalStrategy.toString(),
|
|
13
|
+
stratagies_1.httpVmStrategy.toString(),
|
|
14
|
+
'const loadChunkStrategy = async (strategyType,chunkId,rootOutputDir, remotes, callback) => {',
|
|
15
|
+
Template.indent([
|
|
16
|
+
'switch (strategyType) {',
|
|
17
|
+
Template.indent([
|
|
18
|
+
'case "filesystem": return await fileSystemRunInContextStrategy(chunkId,rootOutputDir, remotes, callback);',
|
|
19
|
+
'case "http-eval": return await httpEvalStrategy(chunkId,rootOutputDir, remotes, callback);',
|
|
20
|
+
'case "http-vm": return await httpVmStrategy(chunkId,rootOutputDir, remotes, callback);',
|
|
21
|
+
'default: throw new Error("Invalid strategy type");',
|
|
22
|
+
]),
|
|
23
|
+
'}',
|
|
24
|
+
]),
|
|
25
|
+
'};',
|
|
26
|
+
]);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
exports.default = FileSystemRunInContextStrategyRuntimeModule;
|
|
30
|
+
//# sourceMappingURL=DynamicFilesystemRuntimeModule.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DynamicFilesystemRuntimeModule.js","sourceRoot":"","sources":["../../../../../packages/node/src/filesystem/DynamicFilesystemRuntimeModule.js"],"names":[],"mappings":";;AAAA,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;AACvD,6CAIsB;AAEtB,MAAM,2CAA4C,SAAQ,aAAa;IACrE;QACE,KAAK,CAAC,qBAAqB,EAAE,aAAa,CAAC,WAAW,CAAC,CAAC;IAC1D,CAAC;IAED,QAAQ;QACN,OAAO,QAAQ,CAAC,QAAQ,CAAC;YACvB,2CAA8B,CAAC,QAAQ,EAAE;YACzC,6BAAgB,CAAC,QAAQ,EAAE;YAC3B,2BAAc,CAAC,QAAQ,EAAE;YACzB,8FAA8F;YAC9F,QAAQ,CAAC,MAAM,CAAC;gBACd,yBAAyB;gBACzB,QAAQ,CAAC,MAAM,CAAC;oBACd,2GAA2G;oBAC3G,4FAA4F;oBAC5F,wFAAwF;oBACxF,oDAAoD;iBACrD,CAAC;gBACF,GAAG;aACJ,CAAC;YACF,IAAI;SACL,CAAC,CAAC;IACL,CAAC;CACF;AAED,kBAAe,2CAA2C,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export function fileSystemRunInContextStrategy(chunkId: any, rootOutputDir: any, remotes: any, callback: any): Promise<void>;
|
|
2
|
+
export function httpEvalStrategy(chunkName: any, remoteName: any, remotes: any, callback: any): Promise<void>;
|
|
3
|
+
/**
|
|
4
|
+
* HttpVmStrategy
|
|
5
|
+
* This function is used to execute a chunk of code in a VM using HTTP or HTTPS based on the protocol.
|
|
6
|
+
* @param {string} chunkName - The name of the chunk to be executed.
|
|
7
|
+
* @param {string} remoteName - The name of the remote server.
|
|
8
|
+
* @param {object} remotes - An object containing the remote servers.
|
|
9
|
+
* @param {function} callback - A callback function to be executed after the chunk is executed.
|
|
10
|
+
*/
|
|
11
|
+
export function httpVmStrategy(chunkName: string, remoteName: string, remotes: object, callback: Function): Promise<void>;
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.httpVmStrategy = exports.httpEvalStrategy = exports.fileSystemRunInContextStrategy = void 0;
|
|
4
|
+
async function fileSystemRunInContextStrategy(chunkId, rootOutputDir, remotes, callback) {
|
|
5
|
+
var fs = require('fs');
|
|
6
|
+
var path = require('path');
|
|
7
|
+
var vm = require('vm');
|
|
8
|
+
var filename = require('path').join(__dirname,
|
|
9
|
+
//eslint-disable-next-line
|
|
10
|
+
rootOutputDir + __webpack_require__.u(chunkId));
|
|
11
|
+
if (fs.existsSync(filename)) {
|
|
12
|
+
fs.readFile(filename, 'utf-8', (err, content) => {
|
|
13
|
+
if (err) {
|
|
14
|
+
callback(err, null);
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
var chunk = {};
|
|
18
|
+
try {
|
|
19
|
+
vm.runInThisContext('(function(exports, require, __dirname, __filename) {' +
|
|
20
|
+
content +
|
|
21
|
+
'\n})', filename)(chunk, require, path.dirname(filename), filename);
|
|
22
|
+
callback(null, chunk);
|
|
23
|
+
}
|
|
24
|
+
catch (e) {
|
|
25
|
+
console.log("'runInThisContext threw'", e);
|
|
26
|
+
callback(e, null);
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
const err = new Error(`File ${filename} does not exist`);
|
|
32
|
+
callback(err, null);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
exports.fileSystemRunInContextStrategy = fileSystemRunInContextStrategy;
|
|
36
|
+
// HttpEvalStrategy
|
|
37
|
+
async function httpEvalStrategy(chunkName, remoteName, remotes, callback) {
|
|
38
|
+
var url;
|
|
39
|
+
try {
|
|
40
|
+
// eslint-disable-next-line no-undef
|
|
41
|
+
url = new URL(chunkName, __webpack_require__.p);
|
|
42
|
+
}
|
|
43
|
+
catch (e) {
|
|
44
|
+
console.error('module-federation: failed to construct absolute chunk path of', remoteName, 'for', chunkName, e);
|
|
45
|
+
url = new URL(remotes[remoteName]);
|
|
46
|
+
var getBasenameFromUrl = (url) => {
|
|
47
|
+
const urlParts = url.split('/');
|
|
48
|
+
return urlParts[urlParts.length - 1];
|
|
49
|
+
};
|
|
50
|
+
var fileToReplace = getBasenameFromUrl(url.pathname);
|
|
51
|
+
url.pathname = url.pathname.replace(fileToReplace, chunkName);
|
|
52
|
+
}
|
|
53
|
+
const data = await fetch(url).then((res) => res.text());
|
|
54
|
+
var chunk = {};
|
|
55
|
+
try {
|
|
56
|
+
eval('(function(exports, require, __dirname, __filename) {' + data + '\n})', chunkName)(chunk, require, '.', chunkName);
|
|
57
|
+
callback(null, chunk);
|
|
58
|
+
}
|
|
59
|
+
catch (e) {
|
|
60
|
+
callback(e, null);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
exports.httpEvalStrategy = httpEvalStrategy;
|
|
64
|
+
/**
|
|
65
|
+
* HttpVmStrategy
|
|
66
|
+
* This function is used to execute a chunk of code in a VM using HTTP or HTTPS based on the protocol.
|
|
67
|
+
* @param {string} chunkName - The name of the chunk to be executed.
|
|
68
|
+
* @param {string} remoteName - The name of the remote server.
|
|
69
|
+
* @param {object} remotes - An object containing the remote servers.
|
|
70
|
+
* @param {function} callback - A callback function to be executed after the chunk is executed.
|
|
71
|
+
*/
|
|
72
|
+
async function httpVmStrategy(chunkName, remoteName, remotes, callback) {
|
|
73
|
+
var http = require('http');
|
|
74
|
+
var https = require('https');
|
|
75
|
+
var vm = require('vm');
|
|
76
|
+
var url;
|
|
77
|
+
try {
|
|
78
|
+
console.log('trying chunk load', chunkName, __webpack_require__.p);
|
|
79
|
+
url = new URL(chunkName, __webpack_require__.p);
|
|
80
|
+
}
|
|
81
|
+
catch (e) {
|
|
82
|
+
console.error('module-federation: failed to construct absolute chunk path of', remoteName, 'for', chunkName, e);
|
|
83
|
+
console.log('fallbak url constructed', remotes._config[remoteName]);
|
|
84
|
+
url = new URL(remotes._config[remoteName]);
|
|
85
|
+
var fileToReplace = require('path').basename(url.pathname);
|
|
86
|
+
url.pathname = url.pathname.replace(fileToReplace, chunkName);
|
|
87
|
+
}
|
|
88
|
+
var protocol = url.protocol === 'https:' ? https : http;
|
|
89
|
+
protocol.get(url, (res) => {
|
|
90
|
+
let data = '';
|
|
91
|
+
res.on('data', (chunk) => {
|
|
92
|
+
data += chunk;
|
|
93
|
+
});
|
|
94
|
+
res.on('end', () => {
|
|
95
|
+
var chunk = {};
|
|
96
|
+
vm.runInThisContext('(function(exports, require, __dirname, __filename) {' + data + '\n})', chunkName)(chunk, require, '.', chunkName);
|
|
97
|
+
callback(null, chunk);
|
|
98
|
+
});
|
|
99
|
+
res.on('error', (err) => {
|
|
100
|
+
callback(err, null);
|
|
101
|
+
});
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
exports.httpVmStrategy = httpVmStrategy;
|
|
105
|
+
//# sourceMappingURL=stratagies.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stratagies.js","sourceRoot":"","sources":["../../../../../packages/node/src/filesystem/stratagies.js"],"names":[],"mappings":"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"}
|
|
@@ -5,7 +5,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
const RuntimeGlobals_1 = __importDefault(require("webpack/lib/RuntimeGlobals"));
|
|
7
7
|
const StartupChunkDependenciesPlugin_1 = __importDefault(require("webpack/lib/runtime/StartupChunkDependenciesPlugin"));
|
|
8
|
-
const
|
|
8
|
+
const DynamicFilesystemChunkLoadingRuntimeModule_1 = __importDefault(require("./DynamicFilesystemChunkLoadingRuntimeModule"));
|
|
9
|
+
const FederationModuleInfoRuntimeModule_1 = __importDefault(require("./FederationModuleInfoRuntimeModule"));
|
|
10
|
+
const RemotePublicPathRuntimeModule_1 = __importDefault(require("./RemotePublicPathRuntimeModule"));
|
|
9
11
|
class CommonJsChunkLoadingPlugin {
|
|
10
12
|
constructor(options) {
|
|
11
13
|
this.options = options || {};
|
|
@@ -34,7 +36,8 @@ class CommonJsChunkLoadingPlugin {
|
|
|
34
36
|
}
|
|
35
37
|
set.add(RuntimeGlobals_1.default.moduleFactoriesAddOnly);
|
|
36
38
|
set.add(RuntimeGlobals_1.default.hasOwnProperty);
|
|
37
|
-
|
|
39
|
+
set.add(RuntimeGlobals_1.default.publicPath); // this breaks things
|
|
40
|
+
compilation.addRuntimeModule(chunk, new DynamicFilesystemChunkLoadingRuntimeModule_1.default(set, this.options, {
|
|
38
41
|
webpack: compiler.webpack,
|
|
39
42
|
}));
|
|
40
43
|
};
|
|
@@ -83,6 +86,30 @@ class CommonJsChunkLoadingPlugin {
|
|
|
83
86
|
}
|
|
84
87
|
set.add(RuntimeGlobals_1.default.getUpdateManifestFilename);
|
|
85
88
|
});
|
|
89
|
+
compilation.hooks.runtimeRequirementInTree
|
|
90
|
+
.for(RuntimeGlobals_1.default.publicPath)
|
|
91
|
+
.tap("RuntimePlugin", (chunk, set) => {
|
|
92
|
+
const { outputOptions } = compilation;
|
|
93
|
+
const { publicPath: globalPublicPath, scriptType } = outputOptions;
|
|
94
|
+
const entryOptions = chunk.getEntryOptions();
|
|
95
|
+
const publicPath = entryOptions && entryOptions.publicPath !== undefined
|
|
96
|
+
? entryOptions.publicPath
|
|
97
|
+
: globalPublicPath;
|
|
98
|
+
const module = new RemotePublicPathRuntimeModule_1.default(this.options);
|
|
99
|
+
if (publicPath === "auto" && scriptType !== "module") {
|
|
100
|
+
set.add(RuntimeGlobals_1.default.global);
|
|
101
|
+
}
|
|
102
|
+
else if (typeof publicPath !== "string" || /\[(full)?hash\]/.test(publicPath)) {
|
|
103
|
+
module.fullHash = true;
|
|
104
|
+
}
|
|
105
|
+
compilation.addRuntimeModule(chunk, module);
|
|
106
|
+
return true;
|
|
107
|
+
});
|
|
108
|
+
compilation.hooks.additionalTreeRuntimeRequirements.tap('StartupChunkDependenciesPlugin', (chunk, set, { chunkGraph }) => {
|
|
109
|
+
compilation.addRuntimeModule(chunk,
|
|
110
|
+
//@ts-ignore
|
|
111
|
+
new FederationModuleInfoRuntimeModule_1.default());
|
|
112
|
+
});
|
|
86
113
|
});
|
|
87
114
|
}
|
|
88
115
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CommonJsChunkLoadingPlugin.js","sourceRoot":"","sources":["../../../../../packages/node/src/plugins/CommonJsChunkLoadingPlugin.ts"],"names":[],"mappings":";;;;;AAEA,gFAAwD;AACxD,wHAAgG;AAChG,
|
|
1
|
+
{"version":3,"file":"CommonJsChunkLoadingPlugin.js","sourceRoot":"","sources":["../../../../../packages/node/src/plugins/CommonJsChunkLoadingPlugin.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { Chunk, Compiler } from 'webpack';
|
|
2
2
|
import { RuntimeModule } from 'webpack';
|
|
3
|
-
|
|
3
|
+
import { SyncWaterfallHook } from 'tapable';
|
|
4
|
+
interface DynamicFilesystemChunkLoadingRuntimeModuleOptions {
|
|
4
5
|
baseURI: Compiler['options']['output']['publicPath'];
|
|
5
6
|
promiseBaseURI?: string;
|
|
6
7
|
remotes: Record<string, string>;
|
|
@@ -10,11 +11,14 @@ interface ReadFileChunkLoadingRuntimeModuleOptions {
|
|
|
10
11
|
interface ChunkLoadingContext {
|
|
11
12
|
webpack: Compiler['webpack'];
|
|
12
13
|
}
|
|
13
|
-
declare class
|
|
14
|
+
declare class DynamicFilesystemChunkLoadingRuntimeModule extends RuntimeModule {
|
|
14
15
|
private runtimeRequirements;
|
|
15
16
|
private options;
|
|
16
17
|
private chunkLoadingContext;
|
|
17
|
-
|
|
18
|
+
hooks: {
|
|
19
|
+
strategyCase: SyncWaterfallHook<unknown, import("tapable").UnsetAdditionalOptions>;
|
|
20
|
+
};
|
|
21
|
+
constructor(runtimeRequirements: Set<string>, options: DynamicFilesystemChunkLoadingRuntimeModuleOptions, chunkLoadingContext: ChunkLoadingContext);
|
|
18
22
|
/**
|
|
19
23
|
* @private
|
|
20
24
|
* @param {Chunk} chunk chunk
|
|
@@ -32,4 +36,4 @@ declare class ReadFileChunkLoadingRuntimeModule extends RuntimeModule {
|
|
|
32
36
|
*/
|
|
33
37
|
generate(): string;
|
|
34
38
|
}
|
|
35
|
-
export default
|
|
39
|
+
export default DynamicFilesystemChunkLoadingRuntimeModule;
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const webpack_1 = require("webpack");
|
|
7
|
+
const identifier_1 = require("webpack/lib/util/identifier");
|
|
8
|
+
const tapable_1 = require("tapable");
|
|
9
|
+
const compileBooleanMatcher_1 = __importDefault(require("webpack/lib/util/compileBooleanMatcher"));
|
|
10
|
+
const parts_1 = require("./parts");
|
|
11
|
+
const stratagies_1 = require("../filesystem/stratagies");
|
|
12
|
+
//hook can be tapped with
|
|
13
|
+
// class MyPlugin {
|
|
14
|
+
// apply(compiler: Compiler) {
|
|
15
|
+
// compiler.hooks.thisCompilation.tap('MyPlugin', (compilation: Compilation) => {
|
|
16
|
+
// compilation.hooks.runtimeModule.tap('MyPlugin', (module: RuntimeModule) => {
|
|
17
|
+
// if (module instanceof DynamicFilesystemChunkLoadingRuntimeModule) {
|
|
18
|
+
// module.hooks.strategyCase.tap('MyPlugin', (source: string) => {
|
|
19
|
+
// return source + '\ncase "my-strategy": return myStrategy(chunkId,rootOutputDir, remotes, callback);';
|
|
20
|
+
// });
|
|
21
|
+
// }
|
|
22
|
+
// });
|
|
23
|
+
// });
|
|
24
|
+
// }
|
|
25
|
+
// }
|
|
26
|
+
class DynamicFilesystemChunkLoadingRuntimeModule extends webpack_1.RuntimeModule {
|
|
27
|
+
constructor(runtimeRequirements, options, chunkLoadingContext) {
|
|
28
|
+
super('readFile chunk loading', webpack_1.RuntimeModule.STAGE_ATTACH);
|
|
29
|
+
this.hooks = {
|
|
30
|
+
strategyCase: new tapable_1.SyncWaterfallHook(['source']),
|
|
31
|
+
};
|
|
32
|
+
this.runtimeRequirements = runtimeRequirements;
|
|
33
|
+
this.options = options;
|
|
34
|
+
this.chunkLoadingContext = chunkLoadingContext;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* @private
|
|
38
|
+
* @param {Chunk} chunk chunk
|
|
39
|
+
* @param {string} rootOutputDir root output directory
|
|
40
|
+
* @returns {string} generated code
|
|
41
|
+
*/
|
|
42
|
+
_generateBaseUri(chunk, rootOutputDir) {
|
|
43
|
+
const options = chunk.getEntryOptions();
|
|
44
|
+
if (options && options.baseUri) {
|
|
45
|
+
return `${webpack_1.RuntimeGlobals.baseURI} = ${JSON.stringify(options.baseUri)};`;
|
|
46
|
+
}
|
|
47
|
+
return `${webpack_1.RuntimeGlobals.baseURI} = require("url").pathToFileURL(${rootOutputDir
|
|
48
|
+
? `__dirname + ${JSON.stringify('/' + rootOutputDir)}`
|
|
49
|
+
: '__filename'});`;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* @private
|
|
53
|
+
* @param {unknown[]} items item to log
|
|
54
|
+
*/
|
|
55
|
+
_getLogger(...items) {
|
|
56
|
+
if (!this.options.debug) {
|
|
57
|
+
return '';
|
|
58
|
+
}
|
|
59
|
+
return `console.log(${items.join(',')});`;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* @returns {string} runtime code
|
|
63
|
+
*/
|
|
64
|
+
generate() {
|
|
65
|
+
const { remotes = {}, name } = this.options;
|
|
66
|
+
const { webpack } = this.chunkLoadingContext;
|
|
67
|
+
const { chunkGraph, chunk, compilation } = this;
|
|
68
|
+
if (!chunkGraph || !chunk || !compilation) {
|
|
69
|
+
console.warn('Missing required properties. Returning empty string.');
|
|
70
|
+
return '';
|
|
71
|
+
}
|
|
72
|
+
const { runtimeTemplate } = compilation;
|
|
73
|
+
const jsModulePlugin = webpack?.javascript?.JavascriptModulesPlugin ||
|
|
74
|
+
require('webpack/lib/javascript/JavascriptModulesPlugin');
|
|
75
|
+
const { chunkHasJs } = jsModulePlugin;
|
|
76
|
+
const fn = webpack_1.RuntimeGlobals.ensureChunkHandlers;
|
|
77
|
+
const conditionMap = chunkGraph.getChunkConditionMap(chunk, chunkHasJs);
|
|
78
|
+
const hasJsMatcher = (0, compileBooleanMatcher_1.default)(conditionMap);
|
|
79
|
+
const initialChunkIds = (0, parts_1.getInitialChunkIds)(chunk, chunkGraph, chunkHasJs);
|
|
80
|
+
const outputName = compilation.getPath(jsModulePlugin.getChunkFilenameTemplate(chunk, compilation.outputOptions), { chunk, contentHashType: 'javascript' });
|
|
81
|
+
const rootOutputDir = (0, identifier_1.getUndoPath)(outputName, compilation.outputOptions.path, false);
|
|
82
|
+
const stateExpression = this.runtimeRequirements.has(webpack_1.RuntimeGlobals.hmrDownloadUpdateHandlers)
|
|
83
|
+
? `${webpack_1.RuntimeGlobals.hmrRuntimeStatePrefix}_readFileVm`
|
|
84
|
+
: undefined;
|
|
85
|
+
const dynamicFilesystemChunkLoadingPluginCode = webpack_1.Template.asString([
|
|
86
|
+
stratagies_1.fileSystemRunInContextStrategy.toString(),
|
|
87
|
+
stratagies_1.httpEvalStrategy.toString(),
|
|
88
|
+
stratagies_1.httpVmStrategy.toString(),
|
|
89
|
+
'const loadChunkStrategy = async (strategyType,chunkId,rootOutputDir, remotes, callback) => {',
|
|
90
|
+
webpack_1.Template.indent([
|
|
91
|
+
'switch (strategyType) {',
|
|
92
|
+
webpack_1.Template.indent([
|
|
93
|
+
'case "filesystem": return await fileSystemRunInContextStrategy(chunkId,rootOutputDir, remotes, callback);',
|
|
94
|
+
'case "http-eval": return await httpEvalStrategy(chunkId,rootOutputDir, remotes, callback);',
|
|
95
|
+
'case "http-vm": return await httpVmStrategy(chunkId,rootOutputDir, remotes, callback);',
|
|
96
|
+
this.hooks.strategyCase.call('default: throw new Error("Invalid strategy type");'),
|
|
97
|
+
]),
|
|
98
|
+
'}',
|
|
99
|
+
]),
|
|
100
|
+
'};'
|
|
101
|
+
]);
|
|
102
|
+
const remoteRegistry = webpack_1.Template.asString([
|
|
103
|
+
`var remotes = ${JSON.stringify(Object.values(remotes).reduce((acc, remote) => {
|
|
104
|
+
const [global, url] = remote.split('@');
|
|
105
|
+
acc[global] = url;
|
|
106
|
+
return acc;
|
|
107
|
+
}, {}))};`,
|
|
108
|
+
`Object.keys(remotes).forEach(function(remote) {
|
|
109
|
+
globalThis.__remote_scope__._config[remote] = remotes[remote];
|
|
110
|
+
});`,
|
|
111
|
+
]);
|
|
112
|
+
return webpack_1.Template.asString([
|
|
113
|
+
remoteRegistry,
|
|
114
|
+
dynamicFilesystemChunkLoadingPluginCode,
|
|
115
|
+
this.runtimeRequirements.has(webpack_1.RuntimeGlobals.baseURI)
|
|
116
|
+
? this._generateBaseUri(chunk, rootOutputDir)
|
|
117
|
+
: '// no baseURI',
|
|
118
|
+
'',
|
|
119
|
+
'// object to store loaded chunks',
|
|
120
|
+
'// "0" means "already loaded", Promise means loading',
|
|
121
|
+
`var installedChunks = ${stateExpression ? `${stateExpression} = ${stateExpression} || ` : ''}{`,
|
|
122
|
+
webpack_1.Template.indent(Array.from(initialChunkIds, (id) => `${JSON.stringify(id)}: 0`).join(',\n')),
|
|
123
|
+
'};',
|
|
124
|
+
'',
|
|
125
|
+
(0, parts_1.handleOnChunkLoad)(this.runtimeRequirements.has(webpack_1.RuntimeGlobals.onChunksLoaded), runtimeTemplate),
|
|
126
|
+
'',
|
|
127
|
+
(0, parts_1.generateInstallChunk)(runtimeTemplate, this.runtimeRequirements.has(webpack_1.RuntimeGlobals.onChunksLoaded)),
|
|
128
|
+
'',
|
|
129
|
+
this.runtimeRequirements.has(webpack_1.RuntimeGlobals.ensureChunkHandlers)
|
|
130
|
+
? (0, parts_1.generateLoadScript)(runtimeTemplate)
|
|
131
|
+
: '// no remote script loader needed',
|
|
132
|
+
this.runtimeRequirements.has(webpack_1.RuntimeGlobals.ensureChunkHandlers)
|
|
133
|
+
? (0, parts_1.generateLoadingCode)(this.runtimeRequirements.has(webpack_1.RuntimeGlobals.ensureChunkHandlers), fn, hasJsMatcher, rootOutputDir, remotes, name)
|
|
134
|
+
: '// no chunk loading',
|
|
135
|
+
'',
|
|
136
|
+
(0, parts_1.generateExternalInstallChunkCode)(this.runtimeRequirements.has(webpack_1.RuntimeGlobals.externalInstallChunk), this.options.debug),
|
|
137
|
+
'',
|
|
138
|
+
(0, parts_1.generateHmrCode)(this.runtimeRequirements.has(webpack_1.RuntimeGlobals.hmrDownloadUpdateHandlers), rootOutputDir),
|
|
139
|
+
'',
|
|
140
|
+
(0, parts_1.generateHmrManifestCode)(this.runtimeRequirements.has(webpack_1.RuntimeGlobals.hmrDownloadManifest), rootOutputDir),
|
|
141
|
+
]);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
exports.default = DynamicFilesystemChunkLoadingRuntimeModule;
|
|
145
|
+
//# sourceMappingURL=DynamicFilesystemChunkLoadingRuntimeModule.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DynamicFilesystemChunkLoadingRuntimeModule.js","sourceRoot":"","sources":["../../../../../packages/node/src/plugins/DynamicFilesystemChunkLoadingRuntimeModule.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const webpack_1 = require("webpack");
|
|
4
|
+
const webpack_2 = require("webpack");
|
|
5
|
+
class FederationModuleInfoRuntimeModule extends webpack_1.RuntimeModule {
|
|
6
|
+
constructor() {
|
|
7
|
+
super('federation module info runtime', webpack_1.RuntimeModule.STAGE_BASIC);
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* @returns {string} runtime code
|
|
11
|
+
*/
|
|
12
|
+
generate() {
|
|
13
|
+
return webpack_2.Template.asString([
|
|
14
|
+
`${webpack_1.RuntimeGlobals.require}.federation = {`,
|
|
15
|
+
webpack_2.Template.indent([
|
|
16
|
+
`cache: {},`,
|
|
17
|
+
`remotes: {},`,
|
|
18
|
+
`moduleInfo: { },`,
|
|
19
|
+
]),
|
|
20
|
+
`};`,
|
|
21
|
+
// `if (!globalThis.__remote_scopes__) {`,
|
|
22
|
+
webpack_2.Template.indent([
|
|
23
|
+
'// backward compatible global proxy',
|
|
24
|
+
`globalThis.__remote_scope__ = globalThis.__remote_scope__ || new Proxy(${webpack_1.RuntimeGlobals.require}.federation, {`,
|
|
25
|
+
webpack_2.Template.indent([
|
|
26
|
+
`get: function(target, prop, receiver) {`,
|
|
27
|
+
'var result;',
|
|
28
|
+
webpack_2.Template.indent([
|
|
29
|
+
`if (prop === '_config') {`,
|
|
30
|
+
webpack_2.Template.indent([`result = ${webpack_1.RuntimeGlobals.require}.federation.remotes;`]),
|
|
31
|
+
`} else {`,
|
|
32
|
+
webpack_2.Template.indent([`result = ${webpack_1.RuntimeGlobals.require}.federation.cache[prop];`]),
|
|
33
|
+
`}`,
|
|
34
|
+
'return result;'
|
|
35
|
+
]),
|
|
36
|
+
`},`,
|
|
37
|
+
`set: function(target, prop, value) {`,
|
|
38
|
+
webpack_2.Template.indent([
|
|
39
|
+
`if (prop === '_config') {`,
|
|
40
|
+
webpack_2.Template.indent([`${webpack_1.RuntimeGlobals.require}.federation.remotes = value;`]),
|
|
41
|
+
`} else {`,
|
|
42
|
+
webpack_2.Template.indent([`${webpack_1.RuntimeGlobals.require}.federation.cache[prop] = value;`]),
|
|
43
|
+
`}`,
|
|
44
|
+
`return true;`,
|
|
45
|
+
]),
|
|
46
|
+
`}`,
|
|
47
|
+
]),
|
|
48
|
+
`});`,
|
|
49
|
+
]),
|
|
50
|
+
// `}`,
|
|
51
|
+
]);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
exports.default = FederationModuleInfoRuntimeModule;
|
|
55
|
+
//# sourceMappingURL=FederationModuleInfoRuntimeModule.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FederationModuleInfoRuntimeModule.js","sourceRoot":"","sources":["../../../../../packages/node/src/plugins/FederationModuleInfoRuntimeModule.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,qCAAwD;AACxD,qCAAmC;AAEnC,MAAM,iCAAkC,SAAQ,uBAAa;IAC3D;QACE,KAAK,CAAC,gCAAgC,EAAE,uBAAa,CAAC,WAAW,CAAE,CAAC;IACtE,CAAC;IAED;;OAEG;IACM,QAAQ;QACf,OAAO,kBAAQ,CAAC,QAAQ,CAAC;YACvB,GAAG,wBAAc,CAAC,OAAO,iBAAiB;YAC1C,kBAAQ,CAAC,MAAM,CAAC;gBACd,YAAY;gBACZ,cAAc;gBACd,kBAAkB;aACnB,CAAC;YACF,IAAI;YACJ,0CAA0C;YAC1C,kBAAQ,CAAC,MAAM,CAAC;gBACd,qCAAqC;gBACrC,0EAA0E,wBAAc,CAAC,OAAO,gBAAgB;gBAChH,kBAAQ,CAAC,MAAM,CAAC;oBACd,yCAAyC;oBACzC,aAAa;oBACb,kBAAQ,CAAC,MAAM,CAAC;wBACd,2BAA2B;wBAC3B,kBAAQ,CAAC,MAAM,CAAC,CAAC,YAAY,wBAAc,CAAC,OAAO,sBAAsB,CAAC,CAAC;wBAC3E,UAAU;wBACV,kBAAQ,CAAC,MAAM,CAAC,CAAC,YAAY,wBAAc,CAAC,OAAO,0BAA0B,CAAC,CAAC;wBAC/E,GAAG;wBACH,gBAAgB;qBACjB,CAAC;oBACF,IAAI;oBACJ,sCAAsC;oBACtC,kBAAQ,CAAC,MAAM,CAAC;wBACd,2BAA2B;wBAC3B,kBAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,wBAAc,CAAC,OAAO,8BAA8B,CAAC,CAAC;wBAC1E,UAAU;wBACV,kBAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,wBAAc,CAAC,OAAO,kCAAkC,CAAC,CAAC;wBAC9E,GAAG;wBACH,cAAc;qBACf,CAAC;oBACF,GAAG;iBACJ,CAAC;gBACF,KAAK;aACN,CAAC;YACF,OAAO;SACR,CAAC,CAAC;IACL,CAAC;CACF;AAED,kBAAe,iCAAiC,CAAC"}
|