@module-federation/bridge-react-webpack-plugin 0.5.0 → 0.5.2
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 +14 -0
- package/dist/index.cjs.js +1687 -1
- package/dist/index.es.js +1666 -1
- package/package.json +4 -2
- package/src/index.ts +4 -1
- package/src/utis.ts +89 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@module-federation/bridge-react-webpack-plugin",
|
|
3
|
-
"version": "0.5.
|
|
3
|
+
"version": "0.5.2",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public"
|
|
6
6
|
},
|
|
@@ -17,7 +17,9 @@
|
|
|
17
17
|
"./*": "./*"
|
|
18
18
|
},
|
|
19
19
|
"dependencies": {
|
|
20
|
-
"
|
|
20
|
+
"semver": "7.6.3",
|
|
21
|
+
"@types/semver": "7.5.8",
|
|
22
|
+
"@module-federation/sdk": "0.5.2"
|
|
21
23
|
},
|
|
22
24
|
"devDependencies": {
|
|
23
25
|
"typescript": "^5.2.2",
|
package/src/index.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import fs from 'node:fs';
|
|
2
2
|
import path from 'node:path';
|
|
3
3
|
import type { moduleFederationPlugin } from '@module-federation/sdk';
|
|
4
|
+
import { getBridgeRouterAlias } from './utis';
|
|
4
5
|
|
|
5
6
|
class ReactBridgeAliasChangerPlugin {
|
|
6
7
|
alias: string;
|
|
@@ -12,6 +13,7 @@ class ReactBridgeAliasChangerPlugin {
|
|
|
12
13
|
this.moduleFederationOptions = info.moduleFederationOptions;
|
|
13
14
|
this.alias = 'react-router-dom$';
|
|
14
15
|
this.targetFile = '@module-federation/bridge-react/dist/router.es.js';
|
|
16
|
+
|
|
15
17
|
if (this.moduleFederationOptions.shared) {
|
|
16
18
|
if (Array.isArray(this.moduleFederationOptions.shared)) {
|
|
17
19
|
if (this.moduleFederationOptions.shared.includes('react-router-dom')) {
|
|
@@ -42,7 +44,8 @@ class ReactBridgeAliasChangerPlugin {
|
|
|
42
44
|
// Update alias
|
|
43
45
|
const updatedAlias = {
|
|
44
46
|
// allow `alias` can be override
|
|
45
|
-
[this.alias]: targetFilePath,
|
|
47
|
+
// [this.alias]: targetFilePath,
|
|
48
|
+
...getBridgeRouterAlias(originalAlias['react-router-dom']),
|
|
46
49
|
...originalAlias,
|
|
47
50
|
};
|
|
48
51
|
|
package/src/utis.ts
ADDED
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import fs from 'node:fs';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import semver from 'semver';
|
|
4
|
+
|
|
5
|
+
export const getBridgeRouterAlias = (
|
|
6
|
+
originalAlias: string,
|
|
7
|
+
): Record<string, string> => {
|
|
8
|
+
const userPackageJsonPath = path.resolve(process.cwd(), 'package.json');
|
|
9
|
+
let userDependencies: Record<string, string> = {};
|
|
10
|
+
|
|
11
|
+
if (fs.existsSync(userPackageJsonPath)) {
|
|
12
|
+
const userPackageJson = JSON.parse(
|
|
13
|
+
fs.readFileSync(userPackageJsonPath, 'utf-8'),
|
|
14
|
+
);
|
|
15
|
+
userDependencies = {
|
|
16
|
+
...userPackageJson.dependencies,
|
|
17
|
+
...userPackageJson.devDependencies,
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
const hasBridgeReact = '@module-federation/bridge-react' in userDependencies;
|
|
22
|
+
|
|
23
|
+
let bridgeRouterAlias = {};
|
|
24
|
+
// user install @module-federation/bridge-react package or set bridgeReactRouterDomAlias
|
|
25
|
+
if (hasBridgeReact) {
|
|
26
|
+
// user install react-router-dom package
|
|
27
|
+
const reactRouterDomVersion = userDependencies['react-router-dom'];
|
|
28
|
+
let majorVersion = 0;
|
|
29
|
+
let reactRouterDomPath = '';
|
|
30
|
+
|
|
31
|
+
// if react-router-dom version is set, use the version in package.json
|
|
32
|
+
if (reactRouterDomVersion) {
|
|
33
|
+
majorVersion = semver.major(
|
|
34
|
+
semver.coerce(reactRouterDomVersion || '0.0.0') ?? '0.0.0',
|
|
35
|
+
);
|
|
36
|
+
reactRouterDomPath = require.resolve('react-router-dom');
|
|
37
|
+
} else {
|
|
38
|
+
// if react-router-dom version is not set, reslove react-router-dom to get the version
|
|
39
|
+
reactRouterDomPath = require.resolve('react-router-dom');
|
|
40
|
+
const packageJsonPath = path.resolve(
|
|
41
|
+
reactRouterDomPath,
|
|
42
|
+
'../../package.json',
|
|
43
|
+
);
|
|
44
|
+
const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));
|
|
45
|
+
majorVersion = parseInt(packageJson.version.split('.')[0]);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
// if react-router-dom path has set alias by user, use the originalAlias
|
|
49
|
+
reactRouterDomPath = originalAlias || reactRouterDomPath;
|
|
50
|
+
|
|
51
|
+
if (majorVersion === 5) {
|
|
52
|
+
bridgeRouterAlias = {
|
|
53
|
+
'react-router-dom$':
|
|
54
|
+
'@module-federation/bridge-react/dist/router-v5.es.js',
|
|
55
|
+
};
|
|
56
|
+
try {
|
|
57
|
+
require.resolve('react-router-dom/index.js');
|
|
58
|
+
} catch (error) {
|
|
59
|
+
// if react-router-dom/index.js cannot be resolved, set the alias to origin reactRouterDomPath
|
|
60
|
+
bridgeRouterAlias = {
|
|
61
|
+
...bridgeRouterAlias,
|
|
62
|
+
'react-router-dom/index.js': reactRouterDomPath,
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
} else if (majorVersion === 6) {
|
|
66
|
+
bridgeRouterAlias = {
|
|
67
|
+
'react-router-dom$':
|
|
68
|
+
'@module-federation/bridge-react/dist/router-v6.es.js',
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
try {
|
|
72
|
+
require.resolve('react-router-dom/dist/index.js');
|
|
73
|
+
} catch (error) {
|
|
74
|
+
// if react-router-dom/dist/index.js cannot be resolved, set the alias to origin reactRouterDomPath
|
|
75
|
+
bridgeRouterAlias = {
|
|
76
|
+
...bridgeRouterAlias,
|
|
77
|
+
'react-router-dom/dist/index.js': reactRouterDomPath,
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
} else {
|
|
81
|
+
console.warn('react-router-dom version is not supported');
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
console.log(
|
|
85
|
+
'<<<<<<<<<<<<< bridgeRouterAlias >>>>>>>>>>>>>',
|
|
86
|
+
bridgeRouterAlias,
|
|
87
|
+
);
|
|
88
|
+
return bridgeRouterAlias;
|
|
89
|
+
};
|