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.
@@ -0,0 +1,4 @@
1
+ export declare function loadReactVersion(version: '17' | '18' | '19'): Promise<{
2
+ React: unknown;
3
+ ReactDOM: unknown;
4
+ }>;
@@ -1,16 +1,8 @@
1
- import { loadRemote } from '@module-federation/runtime';
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<string>;
16
- export { loadRemote };
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
- console.log(`[MF] \u{68C0}\u{6D4B}\u{5230}\u{65B0}\u{7248}\u{672C}: ${pkg}@${latest} (\u{4E0B}\u{6B21}\u{53EF}\u{7528})`);
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}@${finalVersion}`;
81
- const urls = buildCdnUrls(pkg, finalVersion);
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
- let success = false;
85
- for(let i = 0; i < retries; i++)try {
86
- console.log(`[MF] \u{5C1D}\u{8BD5}\u{52A0}\u{8F7D}: ${url} (\u{7B2C} ${i + 1} \u{6B21})`);
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
- await (0, runtime_namespaceObject.loadRemote)(`${scopeName}/remoteEntry`);
94
- console.log(`[MF] \u{6210}\u{529F}\u{52A0}\u{8F7D}: ${scopeName}`);
95
- success = true;
96
- break;
97
- } catch (err) {
98
- console.warn(`[MF] \u{52A0}\u{8F7D}\u{5931}\u{8D25}: ${url}, \u{91CD}\u{8BD5}\u{4E2D}...`, err);
99
- await new Promise((res)=>setTimeout(res, delay));
100
- }
101
- if (success) return scopeName;
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 { loadRemote, registerRemotes } from "@module-federation/runtime";
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
- console.log(`[MF] \u{68C0}\u{6D4B}\u{5230}\u{65B0}\u{7248}\u{672C}: ${pkg}@${latest} (\u{4E0B}\u{6B21}\u{53EF}\u{7528})`);
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}@${finalVersion}`;
52
- const urls = buildCdnUrls(pkg, finalVersion);
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
- let success = false;
56
- for(let i = 0; i < retries; i++)try {
57
- console.log(`[MF] \u{5C1D}\u{8BD5}\u{52A0}\u{8F7D}: ${url} (\u{7B2C} ${i + 1} \u{6B21})`);
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
- await loadRemote(`${scopeName}/remoteEntry`);
65
- console.log(`[MF] \u{6210}\u{529F}\u{52A0}\u{8F7D}: ${scopeName}`);
66
- success = true;
67
- break;
68
- } catch (err) {
69
- console.warn(`[MF] \u{52A0}\u{8F7D}\u{5931}\u{8D25}: ${url}, \u{91CD}\u{8BD5}\u{4E2D}...`, err);
70
- await new Promise((res)=>setTimeout(res, delay));
71
- }
72
- if (success) return scopeName;
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 { loadRemote, loadRemoteMultiVersion };
81
+ export { loadRemoteMultiVersion };
File without changes
@@ -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.2",
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/runtime": "^0.18.3"
28
+ "@module-federation/enhanced": "0.18.3"
28
29
  }
29
30
  }