remote-reload-utils 0.0.1 → 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,14 +1,8 @@
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
- }
1
+ import { LoadRemoteOptions } from './types';
11
2
  /**
12
3
  * 多版本共存的 loadRemote
13
4
  */
14
- export declare function loadRemoteMultiVersion(options: LoadRemoteOptions): Promise<string>;
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
@@ -26,7 +26,7 @@ __webpack_require__.r(__webpack_exports__);
26
26
  __webpack_require__.d(__webpack_exports__, {
27
27
  loadRemoteMultiVersion: ()=>loadRemoteMultiVersion
28
28
  });
29
- const runtime_namespaceObject = require("@module-federation/runtime");
29
+ const runtime_namespaceObject = require("@module-federation/enhanced/runtime");
30
30
  async function fetchLatestVersion(pkg) {
31
31
  const res = await fetch(`https://registry.npmjs.org/${pkg}`);
32
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}`);
@@ -48,12 +48,6 @@ function setVersionCache(pkg, version) {
48
48
  };
49
49
  localStorage.setItem('mf-multi-version', JSON.stringify(cache));
50
50
  }
51
- function buildCdnUrls(pkg, version) {
52
- return [
53
- `https://cdn.jsdelivr.net/npm/${pkg}@${version}/dist/remoteEntry.js`,
54
- `https://unpkg.com/${pkg}@${version}/dist/remoteEntry.js`
55
- ];
56
- }
57
51
  async function loadRemoteMultiVersion(options) {
58
52
  let { name, pkg, version = 'latest', retries = 3, delay = 1000, localFallback, cacheTTL = 86400000, revalidate = true } = options;
59
53
  let finalVersion = version;
@@ -62,42 +56,53 @@ async function loadRemoteMultiVersion(options) {
62
56
  const versions = cache[pkg] || {};
63
57
  const latestCached = Object.keys(versions).sort((a, b)=>versions[b].timestamp - versions[a].timestamp)[0];
64
58
  if (latestCached && Date.now() - versions[latestCached].timestamp < cacheTTL) {
65
- console.log(`[MF] \u{4F7F}\u{7528}\u{7F13}\u{5B58}\u{7248}\u{672C}: ${pkg}@${latestCached}`);
66
59
  finalVersion = latestCached;
67
60
  if (revalidate) fetchLatestVersion(pkg).then((latest)=>{
68
- if (latest !== latestCached) {
69
- 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})`);
70
- setVersionCache(pkg, latest);
71
- }
72
- }).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(()=>{});
73
63
  } else {
74
64
  finalVersion = await fetchLatestVersion(pkg);
75
- console.log(`[MF] \u{83B7}\u{53D6}\u{6700}\u{65B0}\u{7248}\u{672C}: ${pkg}@${finalVersion}`);
76
65
  setVersionCache(pkg, finalVersion);
77
66
  }
78
67
  }
79
- const scopeName = `${name}@${finalVersion}`;
80
- 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
+ ];
81
73
  if (localFallback) urls.push(localFallback);
82
- for (let url of urls){
83
- let success = false;
84
- for(let i = 0; i < retries; i++)try {
85
- console.log(`[MF] \u{5C1D}\u{8BD5}\u{52A0}\u{8F7D}: ${url} (\u{7B2C} ${i + 1} \u{6B21})`);
86
- (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: [
87
78
  {
88
79
  name: scopeName,
89
80
  entry: url
90
81
  }
91
- ]);
92
- await (0, runtime_namespaceObject.loadRemote)(`${scopeName}/remoteEntry`);
93
- console.log(`[MF] \u{6210}\u{529F}\u{52A0}\u{8F7D}: ${scopeName}`);
94
- success = true;
95
- break;
96
- } catch (err) {
97
- console.warn(`[MF] \u{52A0}\u{8F7D}\u{5931}\u{8D25}: ${url}, \u{91CD}\u{8BD5}\u{4E2D}...`, err);
98
- await new Promise((res)=>setTimeout(res, delay));
99
- }
100
- 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));
101
106
  }
102
107
  throw new Error(`[MF] \u{6240}\u{6709} CDN \u{52A0}\u{8F7D}\u{5931}\u{8D25}: ${urls.join(', ')}`);
103
108
  }
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,42 +28,53 @@ 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
  }
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,12 +1,12 @@
1
1
  {
2
2
  "name": "remote-reload-utils",
3
- "version": "0.0.1",
3
+ "version": "0.0.3",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {
7
- "types": "./dist/index.d.ts",
8
- "import": "./dist/index.js",
9
- "require": "./dist/index.cjs"
7
+ "types": "./dist/loadRemote.d.ts",
8
+ "import": "./dist/main.js",
9
+ "require": "./dist/main.cjs"
10
10
  }
11
11
  },
12
12
  "main": "./dist/index.cjs",
@@ -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
  }