Skip to content

Commit d90295b

Browse files
authored
feat: adjust bridge router alias strategy (#2950)
1 parent 4a79d27 commit d90295b

File tree

2 files changed

+50
-38
lines changed

2 files changed

+50
-38
lines changed
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@module-federation/bridge-react-webpack-plugin': patch
3+
---
4+
5+
chore: adjust bridge router alias strategy to alias to router-v6 when not found react-router-dom in package.json

packages/bridge/bridge-react-webpack-plugin/src/utis.ts

Lines changed: 45 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,7 @@ export const findPackageJson = (startPath: string): string | null => {
3030
return null;
3131
};
3232

33-
export const getBridgeRouterAlias = (
34-
originalAlias: string,
35-
): Record<string, string> => {
33+
const getDependencies = () => {
3634
const userPackageJsonPath = path.resolve(process.cwd(), 'package.json');
3735
let userDependencies: Record<string, string> = {};
3836

@@ -45,35 +43,19 @@ export const getBridgeRouterAlias = (
4543
...userPackageJson.devDependencies,
4644
};
4745
}
46+
return userDependencies;
47+
};
4848

49-
let bridgeRouterAlias = {};
50-
let majorVersion = 0;
51-
let reactRouterDomPath = '';
52-
53-
const reactRouterDomVersion = userDependencies['react-router-dom'];
54-
55-
if (originalAlias) {
56-
reactRouterDomPath = originalAlias;
57-
} else if (reactRouterDomVersion) {
58-
majorVersion = checkVersion(reactRouterDomVersion);
59-
reactRouterDomPath = require.resolve('react-router-dom');
60-
} else {
61-
reactRouterDomPath = require.resolve('react-router-dom');
62-
}
63-
64-
const packageJsonPath = findPackageJson(reactRouterDomPath);
65-
66-
if (packageJsonPath) {
67-
const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));
68-
majorVersion = checkVersion(packageJson.version);
69-
} else {
70-
console.warn('Unable to find package.json for react-router-dom');
71-
}
49+
const reactRouterDomV5AliasPath =
50+
'@module-federation/bridge-react/dist/router-v5.es.js';
51+
const reactRouterDomV6AliasPath =
52+
'@module-federation/bridge-react/dist/router-v6.es.js';
7253

54+
const setRouterAlias = (majorVersion: number, reactRouterDomPath: string) => {
55+
let bridgeRouterAlias = {};
7356
if (majorVersion === 5) {
7457
bridgeRouterAlias = {
75-
'react-router-dom$':
76-
'@module-federation/bridge-react/dist/router-v5.es.js',
58+
'react-router-dom$': reactRouterDomV5AliasPath,
7759
};
7860
try {
7961
require.resolve('react-router-dom/index.js');
@@ -86,10 +68,8 @@ export const getBridgeRouterAlias = (
8668
}
8769
} else if (majorVersion === 6) {
8870
bridgeRouterAlias = {
89-
'react-router-dom$':
90-
'@module-federation/bridge-react/dist/router-v6.es.js',
71+
'react-router-dom$': reactRouterDomV6AliasPath,
9172
};
92-
9373
try {
9474
require.resolve('react-router-dom/dist/index.js');
9575
} catch (error) {
@@ -99,13 +79,40 @@ export const getBridgeRouterAlias = (
9979
'react-router-dom/dist/index.js': reactRouterDomPath,
10080
};
10181
}
102-
} else {
103-
console.warn('react-router-dom version is not supported');
10482
}
105-
106-
console.log(
107-
'<<<<<<<<<<<<< bridgeRouterAlias >>>>>>>>>>>>>',
108-
bridgeRouterAlias,
109-
);
11083
return bridgeRouterAlias;
11184
};
85+
86+
export const getBridgeRouterAlias = (
87+
originalAlias: string,
88+
): Record<string, string> => {
89+
const userDependencies = getDependencies();
90+
const reactRouterDomPath = originalAlias
91+
? originalAlias
92+
: userDependencies['react-router-dom']
93+
? require.resolve('react-router-dom')
94+
: '';
95+
const packageJsonPath = reactRouterDomPath
96+
? findPackageJson(reactRouterDomPath)
97+
: '';
98+
// if find react-router-dom in package.json
99+
if (packageJsonPath) {
100+
const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));
101+
const majorVersion = checkVersion(packageJson.version);
102+
const bridgeRouterAlias = setRouterAlias(majorVersion, reactRouterDomPath);
103+
console.log(
104+
'<<<<<<<<<<<<< bridgeRouterAlias >>>>>>>>>>>>>',
105+
bridgeRouterAlias,
106+
);
107+
return bridgeRouterAlias;
108+
} else {
109+
const bridgeRouterAlias = {
110+
'react-router-dom$': reactRouterDomV6AliasPath,
111+
};
112+
console.log(
113+
'<<<<<<<<<<<<< default bridgeRouterAlias >>>>>>>>>>>>>',
114+
bridgeRouterAlias,
115+
);
116+
return bridgeRouterAlias;
117+
}
118+
};

0 commit comments

Comments
 (0)