Skip to content

Commit 256ff24

Browse files
authored
Speed up bundling in FURN (#3937)
* add symlink resolver from rnx-kit to bundling * speed up bundling and reduce bundling errors * Change files
1 parent 6b4d592 commit 256ff24

7 files changed

+85
-25
lines changed

apps/fluent-tester/metro.config.js

Lines changed: 29 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -7,41 +7,55 @@
77

88
const path = require('path');
99
const { exclusionList, makeMetroConfig, resolveUniqueModule } = require('@rnx-kit/metro-config');
10+
const MetroSymlinksResolver = require('@rnx-kit/metro-resolver-symlinks');
1011

11-
const [reactIs, reactIsExcludePattern] = resolveUniqueModule('react-is');
12+
// ensure regex paths are merged, normalized, use forward slashes and end with a /
13+
function pathForRegex(...parts) {
14+
let result = path.normalize(path.join(...parts));
15+
if (!result.endsWith(path.sep)) {
16+
result += path.sep;
17+
}
18+
return result.replace(/[/\\]+/g, '/');
19+
}
1220

13-
const blockList = exclusionList([
14-
/node_modules\/.*\/node_modules\/react-native\/.*/,
21+
const excludeMixins = [];
22+
const extraNodeModules = {};
23+
function ensureUniqueModule(moduleName, excludeList, nodeModules) {
24+
const [nmEntry, excludePattern] = resolveUniqueModule(moduleName);
25+
excludeMixins.push(excludePattern);
26+
extraNodeModules[moduleName] = nmEntry;
27+
}
28+
29+
// build up the added excludes and extraNodeModules
30+
['react-is', 'invariant', '@babel/runtime', 'base64-js'].forEach((moduleName) => ensureUniqueModule(moduleName));
1531

32+
const blockList = exclusionList([
1633
// This stops "react-native run-windows" from causing the metro server to
17-
// crash if its already running
18-
new RegExp(`${path.join(__dirname, 'windows').replace(/[/\\]+/g, '/')}.*`),
34+
// crash if its already running. This should also cover /.*\/.vs\/.*/, as .vs folders go next to the .sln file
35+
new RegExp(`${pathForRegex(__dirname, 'windows')}.*`),
1936

2037
// Workaround for `EPERM: operation not permitted, lstat '~\midl-MIDLRT-cl.read.1.tlog'`
21-
/.*\.tlog/,
22-
23-
// Prevent Metro from watching temporary files generated by Visual Studio
24-
// otherwise it may crash when they are removed when closing a project.
25-
/.*\/.vs\/.*/,
38+
/.*\.tlog$/,
2639

2740
// Workaround for `EBUSY: resource busy or locked, open '~\msbuild.ProjectImports.zip'`
28-
/.*\.ProjectImports\.zip/,
41+
/.*\.ProjectImports\.zip$/,
2942

3043
// Exclude other test apps
31-
/.*\/apps\/(?:win32)\/.*/,
44+
new RegExp(`${pathForRegex(__dirname, '../win32')}.*`),
3245

3346
// Exclude build output directory
34-
/.*\/apps\/fluent-tester\/dist\/.*/,
47+
new RegExp(`${pathForRegex(__dirname, 'dist')}.*`),
3548

36-
reactIsExcludePattern,
49+
...excludeMixins,
3750
]);
3851

3952
let config = makeMetroConfig({
4053
resolver: {
4154
blockList,
4255
extraNodeModules: {
43-
'react-is': reactIs,
56+
...extraNodeModules,
4457
},
58+
resolveRequest: MetroSymlinksResolver(),
4559
},
4660
transformer: {
4761
// This transformer selects between the regular transformer and svg transformer depending on the file type

apps/fluent-tester/package.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -111,8 +111,9 @@
111111
"@react-native/babel-preset": "^0.74.0",
112112
"@react-native/metro-babel-transformer": "^0.74.0",
113113
"@react-native/metro-config": "^0.74.0",
114-
"@rnx-kit/cli": "^0.18.0",
115-
"@rnx-kit/metro-config": "^2.0.0",
114+
"@rnx-kit/cli": "^0.18.9",
115+
"@rnx-kit/metro-config": "^2.1.0",
116+
"@rnx-kit/metro-resolver-symlinks": "^0.2.5",
116117
"@types/jasmine": "5.1.4",
117118
"@wdio/cli": "^8.40.0",
118119
"@wdio/globals": "^8.40.0",

apps/win32/metro.config.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
*/
77
// @ts-check
88
const { makeMetroConfig } = require('@rnx-kit/metro-config');
9+
const MetroSymlinksResolver = require('@rnx-kit/metro-resolver-symlinks');
910
const { getDefaultConfig } = require('metro-config');
1011

1112
module.exports = async () => {
@@ -17,6 +18,7 @@ module.exports = async () => {
1718
resolver: {
1819
assetExts: [...assetExts.filter((ext) => ext !== 'svg'), 'ttf', 'otf', 'png'],
1920
sourceExts: [...sourceExts, 'svg'],
21+
resolveRequest: MetroSymlinksResolver(),
2022
},
2123
transformer: {
2224
// This transformer selects between the regular transformer and svg transformer depending on the file type

apps/win32/package.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,9 @@
4949
"@react-native/babel-preset": "^0.74.0",
5050
"@react-native/metro-babel-transformer": "^0.74.0",
5151
"@react-native/metro-config": "^0.74.0",
52-
"@rnx-kit/cli": "^0.18.0",
53-
"@rnx-kit/metro-config": "^2.0.0",
52+
"@rnx-kit/cli": "^0.18.9",
53+
"@rnx-kit/metro-config": "^2.1.0",
54+
"@rnx-kit/metro-resolver-symlinks": "^0.2.5",
5455
"@types/react": "^18.2.0",
5556
"metro-config": "^0.80.3",
5657
"react-native-svg-transformer": "^1.0.0",
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
{
2+
"type": "patch",
3+
"comment": "speed up bundling and reduce bundling errors",
4+
"packageName": "@fluentui-react-native/tester",
5+
"email": "[email protected]",
6+
"dependentChangeType": "patch"
7+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
{
2+
"type": "patch",
3+
"comment": "speed up bundling and reduce bundling errors",
4+
"packageName": "@fluentui-react-native/tester-win32",
5+
"email": "[email protected]",
6+
"dependentChangeType": "patch"
7+
}

yarn.lock

Lines changed: 34 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4572,8 +4572,9 @@ __metadata:
45724572
"@react-native/babel-preset": "npm:^0.74.0"
45734573
"@react-native/metro-babel-transformer": "npm:^0.74.0"
45744574
"@react-native/metro-config": "npm:^0.74.0"
4575-
"@rnx-kit/cli": "npm:^0.18.0"
4576-
"@rnx-kit/metro-config": "npm:^2.0.0"
4575+
"@rnx-kit/cli": "npm:^0.18.9"
4576+
"@rnx-kit/metro-config": "npm:^2.1.0"
4577+
"@rnx-kit/metro-resolver-symlinks": "npm:^0.2.5"
45774578
"@types/react": "npm:^18.2.0"
45784579
metro-config: "npm:^0.80.3"
45794580
react: "npm:18.2.0"
@@ -4656,8 +4657,9 @@ __metadata:
46564657
"@react-native/babel-preset": "npm:^0.74.0"
46574658
"@react-native/metro-babel-transformer": "npm:^0.74.0"
46584659
"@react-native/metro-config": "npm:^0.74.0"
4659-
"@rnx-kit/cli": "npm:^0.18.0"
4660-
"@rnx-kit/metro-config": "npm:^2.0.0"
4660+
"@rnx-kit/cli": "npm:^0.18.9"
4661+
"@rnx-kit/metro-config": "npm:^2.1.0"
4662+
"@rnx-kit/metro-resolver-symlinks": "npm:^0.2.5"
46614663
"@types/jasmine": "npm:5.1.4"
46624664
"@types/react": "npm:~18.2.0"
46634665
"@warren-ms/react-native-icons": "npm:^0.0.13"
@@ -6774,7 +6776,7 @@ __metadata:
67746776
languageName: node
67756777
linkType: hard
67766778

6777-
"@rnx-kit/cli@npm:^0.18.0":
6779+
"@rnx-kit/cli@npm:^0.18.9":
67786780
version: 0.18.9
67796781
resolution: "@rnx-kit/cli@npm:0.18.9"
67806782
dependencies:
@@ -6876,7 +6878,7 @@ __metadata:
68766878
languageName: node
68776879
linkType: hard
68786880

6879-
"@rnx-kit/metro-config@npm:^2.0.0":
6881+
"@rnx-kit/metro-config@npm:^2.0.0, @rnx-kit/metro-config@npm:^2.1.0":
68806882
version: 2.1.0
68816883
resolution: "@rnx-kit/metro-config@npm:2.1.0"
68826884
dependencies:
@@ -6930,6 +6932,23 @@ __metadata:
69306932
languageName: node
69316933
linkType: hard
69326934

6935+
"@rnx-kit/metro-resolver-symlinks@npm:^0.2.5":
6936+
version: 0.2.5
6937+
resolution: "@rnx-kit/metro-resolver-symlinks@npm:0.2.5"
6938+
dependencies:
6939+
"@rnx-kit/console": "npm:^2.0.0"
6940+
"@rnx-kit/tools-node": "npm:^3.0.0"
6941+
"@rnx-kit/tools-react-native": "npm:^2.2.0"
6942+
enhanced-resolve: "npm:^5.8.3"
6943+
peerDependencies:
6944+
oxc-resolver: ^9.0.0
6945+
peerDependenciesMeta:
6946+
oxc-resolver:
6947+
optional: true
6948+
checksum: 10c0/ab2a7d2e5a8278ba83575afc466eb9ab1fc90aa9845d5a1dcabf693cac85ce555f4ff162740fcf73cc7d553cd0060237f9cb323feced5adf4b5d266bf415479f
6949+
languageName: node
6950+
linkType: hard
6951+
69336952
"@rnx-kit/metro-serializer-esbuild@npm:^0.2.1":
69346953
version: 0.2.2
69356954
resolution: "@rnx-kit/metro-serializer-esbuild@npm:0.2.2"
@@ -7062,6 +7081,15 @@ __metadata:
70627081
languageName: node
70637082
linkType: hard
70647083

7084+
"@rnx-kit/tools-react-native@npm:^2.2.0":
7085+
version: 2.2.0
7086+
resolution: "@rnx-kit/tools-react-native@npm:2.2.0"
7087+
dependencies:
7088+
"@rnx-kit/tools-node": "npm:^3.0.0"
7089+
checksum: 10c0/631eecefda6b2b53eccdd18656f24a5426625522b80e956504d2b37acbcdc1e98eddc692aec0833536e6fd1b285c4a5d75e27f23a16fdcb099fabae46013740d
7090+
languageName: node
7091+
linkType: hard
7092+
70657093
"@rnx-kit/tools-shell@npm:^0.2.0":
70667094
version: 0.2.1
70677095
resolution: "@rnx-kit/tools-shell@npm:0.2.1"

0 commit comments

Comments
 (0)