remote-reload-utils 0.0.2 → 0.0.3
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/loadReactVersion.d.ts +4 -0
- package/dist/loadRemote.d.ts +5 -13
- package/dist/main.cjs +37 -35
- package/dist/main.js +37 -32
- package/dist/react-mf-adapter.d.ts +0 -0
- package/dist/types.d.ts +17 -0
- package/package.json +4 -3
package/dist/loadRemote.d.ts
CHANGED
|
@@ -1,16 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export interface LoadRemoteOptions {
|
|
3
|
-
name: string;
|
|
4
|
-
pkg: string;
|
|
5
|
-
version?: string;
|
|
6
|
-
retries?: number;
|
|
7
|
-
delay?: number;
|
|
8
|
-
localFallback?: string;
|
|
9
|
-
cacheTTL?: number;
|
|
10
|
-
revalidate?: boolean;
|
|
11
|
-
}
|
|
1
|
+
import { LoadRemoteOptions } from './types';
|
|
12
2
|
/**
|
|
13
3
|
* 多版本共存的 loadRemote
|
|
14
4
|
*/
|
|
15
|
-
export declare function loadRemoteMultiVersion(options: LoadRemoteOptions): Promise<
|
|
16
|
-
|
|
5
|
+
export declare function loadRemoteMultiVersion(options: LoadRemoteOptions): Promise<{
|
|
6
|
+
scopeName: string;
|
|
7
|
+
mf: import("@module-federation/enhanced/runtime").ModuleFederation;
|
|
8
|
+
}>;
|
package/dist/main.cjs
CHANGED
|
@@ -24,10 +24,9 @@ var __webpack_require__ = {};
|
|
|
24
24
|
var __webpack_exports__ = {};
|
|
25
25
|
__webpack_require__.r(__webpack_exports__);
|
|
26
26
|
__webpack_require__.d(__webpack_exports__, {
|
|
27
|
-
loadRemoteMultiVersion: ()=>loadRemoteMultiVersion
|
|
28
|
-
loadRemote: ()=>runtime_namespaceObject.loadRemote
|
|
27
|
+
loadRemoteMultiVersion: ()=>loadRemoteMultiVersion
|
|
29
28
|
});
|
|
30
|
-
const runtime_namespaceObject = require("@module-federation/runtime");
|
|
29
|
+
const runtime_namespaceObject = require("@module-federation/enhanced/runtime");
|
|
31
30
|
async function fetchLatestVersion(pkg) {
|
|
32
31
|
const res = await fetch(`https://registry.npmjs.org/${pkg}`);
|
|
33
32
|
if (!res.ok) throw new Error(`\u{65E0}\u{6CD5}\u{83B7}\u{53D6} ${pkg} \u{7684}\u{7248}\u{672C}\u{4FE1}\u{606F}`);
|
|
@@ -49,12 +48,6 @@ function setVersionCache(pkg, version) {
|
|
|
49
48
|
};
|
|
50
49
|
localStorage.setItem('mf-multi-version', JSON.stringify(cache));
|
|
51
50
|
}
|
|
52
|
-
function buildCdnUrls(pkg, version) {
|
|
53
|
-
return [
|
|
54
|
-
`https://cdn.jsdelivr.net/npm/${pkg}@${version}/dist/remoteEntry.js`,
|
|
55
|
-
`https://unpkg.com/${pkg}@${version}/dist/remoteEntry.js`
|
|
56
|
-
];
|
|
57
|
-
}
|
|
58
51
|
async function loadRemoteMultiVersion(options) {
|
|
59
52
|
let { name, pkg, version = 'latest', retries = 3, delay = 1000, localFallback, cacheTTL = 86400000, revalidate = true } = options;
|
|
60
53
|
let finalVersion = version;
|
|
@@ -63,49 +56,58 @@ async function loadRemoteMultiVersion(options) {
|
|
|
63
56
|
const versions = cache[pkg] || {};
|
|
64
57
|
const latestCached = Object.keys(versions).sort((a, b)=>versions[b].timestamp - versions[a].timestamp)[0];
|
|
65
58
|
if (latestCached && Date.now() - versions[latestCached].timestamp < cacheTTL) {
|
|
66
|
-
console.log(`[MF] \u{4F7F}\u{7528}\u{7F13}\u{5B58}\u{7248}\u{672C}: ${pkg}@${latestCached}`);
|
|
67
59
|
finalVersion = latestCached;
|
|
68
60
|
if (revalidate) fetchLatestVersion(pkg).then((latest)=>{
|
|
69
|
-
if (latest !== latestCached)
|
|
70
|
-
|
|
71
|
-
setVersionCache(pkg, latest);
|
|
72
|
-
}
|
|
73
|
-
}).catch((err)=>console.warn(`[MF] \u{68C0}\u{67E5}\u{66F4}\u{65B0}\u{5931}\u{8D25}: ${pkg}`, err));
|
|
61
|
+
if (latest !== latestCached) setVersionCache(pkg, latest);
|
|
62
|
+
}).catch(()=>{});
|
|
74
63
|
} else {
|
|
75
64
|
finalVersion = await fetchLatestVersion(pkg);
|
|
76
|
-
console.log(`[MF] \u{83B7}\u{53D6}\u{6700}\u{65B0}\u{7248}\u{672C}: ${pkg}@${finalVersion}`);
|
|
77
65
|
setVersionCache(pkg, finalVersion);
|
|
78
66
|
}
|
|
79
67
|
}
|
|
80
|
-
const scopeName = `${name}
|
|
81
|
-
const urls =
|
|
68
|
+
const scopeName = `${name}`;
|
|
69
|
+
const urls = [
|
|
70
|
+
`https://cdn.jsdelivr.net/npm/${pkg}@${finalVersion}/dist/remoteEntry.js`,
|
|
71
|
+
`https://unpkg.com/${pkg}@${finalVersion}/dist/remoteEntry.js`
|
|
72
|
+
];
|
|
82
73
|
if (localFallback) urls.push(localFallback);
|
|
83
|
-
for (let url of urls){
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
(0, runtime_namespaceObject.registerRemotes)([
|
|
74
|
+
for (let url of urls)for(let i = 0; i < retries; i++)try {
|
|
75
|
+
const mf = (0, runtime_namespaceObject.createInstance)({
|
|
76
|
+
name: 'host',
|
|
77
|
+
remotes: [
|
|
88
78
|
{
|
|
89
79
|
name: scopeName,
|
|
90
80
|
entry: url
|
|
91
81
|
}
|
|
92
|
-
]
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
82
|
+
],
|
|
83
|
+
shared: {
|
|
84
|
+
react: {
|
|
85
|
+
shareConfig: {
|
|
86
|
+
singleton: true,
|
|
87
|
+
eager: true,
|
|
88
|
+
requiredVersion: false
|
|
89
|
+
}
|
|
90
|
+
},
|
|
91
|
+
'react-dom': {
|
|
92
|
+
shareConfig: {
|
|
93
|
+
singleton: true,
|
|
94
|
+
eager: true,
|
|
95
|
+
requiredVersion: false
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
return {
|
|
101
|
+
scopeName,
|
|
102
|
+
mf
|
|
103
|
+
};
|
|
104
|
+
} catch {
|
|
105
|
+
await new Promise((res)=>setTimeout(res, delay));
|
|
102
106
|
}
|
|
103
107
|
throw new Error(`[MF] \u{6240}\u{6709} CDN \u{52A0}\u{8F7D}\u{5931}\u{8D25}: ${urls.join(', ')}`);
|
|
104
108
|
}
|
|
105
|
-
exports.loadRemote = __webpack_exports__.loadRemote;
|
|
106
109
|
exports.loadRemoteMultiVersion = __webpack_exports__.loadRemoteMultiVersion;
|
|
107
110
|
for(var __webpack_i__ in __webpack_exports__)if (-1 === [
|
|
108
|
-
"loadRemote",
|
|
109
111
|
"loadRemoteMultiVersion"
|
|
110
112
|
].indexOf(__webpack_i__)) exports[__webpack_i__] = __webpack_exports__[__webpack_i__];
|
|
111
113
|
Object.defineProperty(exports, '__esModule', {
|
package/dist/main.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { createInstance } from "@module-federation/enhanced/runtime";
|
|
2
2
|
async function fetchLatestVersion(pkg) {
|
|
3
3
|
const res = await fetch(`https://registry.npmjs.org/${pkg}`);
|
|
4
4
|
if (!res.ok) throw new Error(`\u{65E0}\u{6CD5}\u{83B7}\u{53D6} ${pkg} \u{7684}\u{7248}\u{672C}\u{4FE1}\u{606F}`);
|
|
@@ -20,12 +20,6 @@ function setVersionCache(pkg, version) {
|
|
|
20
20
|
};
|
|
21
21
|
localStorage.setItem('mf-multi-version', JSON.stringify(cache));
|
|
22
22
|
}
|
|
23
|
-
function buildCdnUrls(pkg, version) {
|
|
24
|
-
return [
|
|
25
|
-
`https://cdn.jsdelivr.net/npm/${pkg}@${version}/dist/remoteEntry.js`,
|
|
26
|
-
`https://unpkg.com/${pkg}@${version}/dist/remoteEntry.js`
|
|
27
|
-
];
|
|
28
|
-
}
|
|
29
23
|
async function loadRemoteMultiVersion(options) {
|
|
30
24
|
let { name, pkg, version = 'latest', retries = 3, delay = 1000, localFallback, cacheTTL = 86400000, revalidate = true } = options;
|
|
31
25
|
let finalVersion = version;
|
|
@@ -34,43 +28,54 @@ async function loadRemoteMultiVersion(options) {
|
|
|
34
28
|
const versions = cache[pkg] || {};
|
|
35
29
|
const latestCached = Object.keys(versions).sort((a, b)=>versions[b].timestamp - versions[a].timestamp)[0];
|
|
36
30
|
if (latestCached && Date.now() - versions[latestCached].timestamp < cacheTTL) {
|
|
37
|
-
console.log(`[MF] \u{4F7F}\u{7528}\u{7F13}\u{5B58}\u{7248}\u{672C}: ${pkg}@${latestCached}`);
|
|
38
31
|
finalVersion = latestCached;
|
|
39
32
|
if (revalidate) fetchLatestVersion(pkg).then((latest)=>{
|
|
40
|
-
if (latest !== latestCached)
|
|
41
|
-
|
|
42
|
-
setVersionCache(pkg, latest);
|
|
43
|
-
}
|
|
44
|
-
}).catch((err)=>console.warn(`[MF] \u{68C0}\u{67E5}\u{66F4}\u{65B0}\u{5931}\u{8D25}: ${pkg}`, err));
|
|
33
|
+
if (latest !== latestCached) setVersionCache(pkg, latest);
|
|
34
|
+
}).catch(()=>{});
|
|
45
35
|
} else {
|
|
46
36
|
finalVersion = await fetchLatestVersion(pkg);
|
|
47
|
-
console.log(`[MF] \u{83B7}\u{53D6}\u{6700}\u{65B0}\u{7248}\u{672C}: ${pkg}@${finalVersion}`);
|
|
48
37
|
setVersionCache(pkg, finalVersion);
|
|
49
38
|
}
|
|
50
39
|
}
|
|
51
|
-
const scopeName = `${name}
|
|
52
|
-
const urls =
|
|
40
|
+
const scopeName = `${name}`;
|
|
41
|
+
const urls = [
|
|
42
|
+
`https://cdn.jsdelivr.net/npm/${pkg}@${finalVersion}/dist/remoteEntry.js`,
|
|
43
|
+
`https://unpkg.com/${pkg}@${finalVersion}/dist/remoteEntry.js`
|
|
44
|
+
];
|
|
53
45
|
if (localFallback) urls.push(localFallback);
|
|
54
|
-
for (let url of urls){
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
registerRemotes([
|
|
46
|
+
for (let url of urls)for(let i = 0; i < retries; i++)try {
|
|
47
|
+
const mf = createInstance({
|
|
48
|
+
name: 'host',
|
|
49
|
+
remotes: [
|
|
59
50
|
{
|
|
60
51
|
name: scopeName,
|
|
61
52
|
entry: url
|
|
62
53
|
}
|
|
63
|
-
]
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
54
|
+
],
|
|
55
|
+
shared: {
|
|
56
|
+
react: {
|
|
57
|
+
shareConfig: {
|
|
58
|
+
singleton: true,
|
|
59
|
+
eager: true,
|
|
60
|
+
requiredVersion: false
|
|
61
|
+
}
|
|
62
|
+
},
|
|
63
|
+
'react-dom': {
|
|
64
|
+
shareConfig: {
|
|
65
|
+
singleton: true,
|
|
66
|
+
eager: true,
|
|
67
|
+
requiredVersion: false
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
return {
|
|
73
|
+
scopeName,
|
|
74
|
+
mf
|
|
75
|
+
};
|
|
76
|
+
} catch {
|
|
77
|
+
await new Promise((res)=>setTimeout(res, delay));
|
|
73
78
|
}
|
|
74
79
|
throw new Error(`[MF] \u{6240}\u{6709} CDN \u{52A0}\u{8F7D}\u{5931}\u{8D25}: ${urls.join(', ')}`);
|
|
75
80
|
}
|
|
76
|
-
export {
|
|
81
|
+
export { loadRemoteMultiVersion };
|
|
File without changes
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export interface LoadRemoteOptions {
|
|
2
|
+
name: string;
|
|
3
|
+
pkg: string;
|
|
4
|
+
version?: string;
|
|
5
|
+
retries?: number;
|
|
6
|
+
delay?: number;
|
|
7
|
+
localFallback?: string;
|
|
8
|
+
cacheTTL?: number;
|
|
9
|
+
revalidate?: boolean;
|
|
10
|
+
}
|
|
11
|
+
export interface VersionCache {
|
|
12
|
+
[pkg: string]: {
|
|
13
|
+
[version: string]: {
|
|
14
|
+
timestamp: number;
|
|
15
|
+
};
|
|
16
|
+
};
|
|
17
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "remote-reload-utils",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.3",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": {
|
|
@@ -16,7 +16,8 @@
|
|
|
16
16
|
],
|
|
17
17
|
"scripts": {
|
|
18
18
|
"build": "rslib build",
|
|
19
|
-
"dev": "rslib build --watch"
|
|
19
|
+
"dev": "rslib build --watch",
|
|
20
|
+
"prepublishOnly": "npm run build"
|
|
20
21
|
},
|
|
21
22
|
"devDependencies": {
|
|
22
23
|
"@rslib/core": "^0.12.2",
|
|
@@ -24,6 +25,6 @@
|
|
|
24
25
|
"typescript": "^5.9.2"
|
|
25
26
|
},
|
|
26
27
|
"dependencies": {
|
|
27
|
-
"@module-federation/
|
|
28
|
+
"@module-federation/enhanced": "0.18.3"
|
|
28
29
|
}
|
|
29
30
|
}
|