Skip to content

Commit 555c18c

Browse files
authored
[Monorepo] Fix hoisting (#3518)
## Description When tried to update `react-native` to `0.80.0-rc.1` I've noticed that hoisting doesn't work as it should - `BasicExample` had version `0.80.0-rc.1` in its `node_modules`, but the version hoisted to root was `0.79.0`. This resulted in errors during `pods` installation. To get rid of this problem we need to do 2 thing: 1. Change `react-native` to `peerDependency` in `CommonApp`, 2. Update both, `BasicExample` and `react-native-gesture-handler` `package.json` files at the same time. This ensures that version hoisted to root will be the same. Other apps should not be affected since they have `hoistingLimits: "workspaces"`. This PR also adds `selfReferences: false` - with this change, apps won't be referenced in root `node_modules` ## Test plan Checked how hoisting behaves with different react-native versions across monorepo.
1 parent fda1818 commit 555c18c

7 files changed

Lines changed: 67 additions & 31 deletions

File tree

.lintstagedrc.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
{
2+
"{apps/BasicExample,packages/react-native-gesture-handler}/package.json": "node scripts/check-rn-versions.js",
23
"**/*.{ts,tsx}": ["prettier --write", "eslint"],
34
"packages/react-native-gesture-handler/android/**/*.kt": [
45
"node scripts/check-android-dirs.js",

apps/BasicExample/package.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,5 +50,8 @@
5050
},
5151
"engines": {
5252
"node": ">=18"
53+
},
54+
"installConfig": {
55+
"selfReferences": false
5356
}
5457
}

apps/CommonApp/package.json

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,16 @@
1212
"lint-js": "eslint --ext '.js,.ts,.tsx' src/ && yarn prettier --check './src/**/*.{js,jsx,ts,tsx}'",
1313
"format-js": "prettier --write --list-different App.tsx './src/**/*.{js,jsx,ts,tsx}'"
1414
},
15+
"peerDependencies": {
16+
"react": "*",
17+
"react-native": "*"
18+
},
1519
"dependencies": {
1620
"@react-native-async-storage/async-storage": "^2.1.2",
1721
"@react-navigation/elements": "^2.3.8",
1822
"@react-navigation/native": "^7.1.6",
1923
"@react-navigation/stack": "^7.2.10",
2024
"@swmansion/icons": "^0.0.1",
21-
"react": "19.0.0",
22-
"react-native": "0.79.0",
2325
"react-native-gesture-handler": "workspace:*",
2426
"react-native-reanimated": "^3.17.4",
2527
"react-native-safe-area-context": "^5.4.0"
@@ -57,5 +59,8 @@
5759
},
5860
"engines": {
5961
"node": ">=18"
62+
},
63+
"installConfig": {
64+
"selfReferences": false
6065
}
6166
}

apps/ExpoExample/package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
},
4141
"private": true,
4242
"installConfig": {
43-
"hoistingLimits": "workspaces"
43+
"hoistingLimits": "workspaces",
44+
"selfReferences": false
4445
}
4546
}

apps/MacOSExample/package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@
4949
"node": ">=18"
5050
},
5151
"installConfig": {
52-
"hoistingLimits": "workspaces"
52+
"hoistingLimits": "workspaces",
53+
"selfReferences": false
5354
}
5455
}

scripts/check-rn-versions.js

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
const { exit } = require('process');
2+
const path = require('path');
3+
4+
const basicExamplePackageJsonPath = path.join(
5+
__dirname,
6+
'../apps/BasicExample/package.json'
7+
);
8+
const basicExamplePackageJson = require(basicExamplePackageJsonPath);
9+
10+
const rnghPackageJsonPath = path.join(
11+
__dirname,
12+
'../packages/react-native-gesture-handler/package.json'
13+
);
14+
const rnghPackageJson = require(rnghPackageJsonPath);
15+
16+
if (
17+
rnghPackageJson.devDependencies['react-native'] !==
18+
basicExamplePackageJson.dependencies['react-native']
19+
) {
20+
console.error(
21+
'There is a mismatch between the react-native version in the BasicExample and react-native-gesture-handler packages.\nIf you are bumping react-native version, make sure to also update react-native-gesture-handler package.json.'
22+
);
23+
exit(1);
24+
}

yarn.lock

Lines changed: 28 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -2799,7 +2799,7 @@ __metadata:
27992799
languageName: node
28002800
linkType: hard
28012801

2802-
"@pkgr/core@npm:^0.2.3":
2802+
"@pkgr/core@npm:^0.2.4":
28032803
version: 0.2.4
28042804
resolution: "@pkgr/core@npm:0.2.4"
28052805
checksum: 10c0/2528a443bbbef5d4686614e1d73f834f19ccbc975f62b2a64974a6b97bcdf677b9c5e8948e04808ac4f0d853e2f422adfaae2a06e9e9f4f5cf8af76f1adf8dc1
@@ -4354,11 +4354,11 @@ __metadata:
43544354
linkType: hard
43554355

43564356
"@types/node@npm:*":
4357-
version: 22.15.17
4358-
resolution: "@types/node@npm:22.15.17"
4357+
version: 22.15.18
4358+
resolution: "@types/node@npm:22.15.18"
43594359
dependencies:
43604360
undici-types: "npm:~6.21.0"
4361-
checksum: 10c0/fb92aa10b628683c5b965749f955bc2322485ecb0ea6c2f4cae5f2c7537a16834607e67083a9e9281faaae8d7dee9ada8d6a5c0de9a52c17d82912ef00c0fdd4
4361+
checksum: 10c0/e23178c568e2dc6b93b6aa3b8dfb45f9556e527918c947fe7406a4c92d2184c7396558912400c3b1b8d0fa952ec63819aca2b8e4d3545455fc6f1e9623e09ca6
43624362
languageName: node
43634363
linkType: hard
43644364

@@ -4988,14 +4988,15 @@ __metadata:
49884988
expo-camera: "npm:~16.1.1"
49894989
jest: "npm:^29.6.3"
49904990
prettier: "npm:3.3.3"
4991-
react: "npm:19.0.0"
4992-
react-native: "npm:0.79.0"
49934991
react-native-gesture-handler: "workspace:*"
49944992
react-native-reanimated: "npm:^3.17.4"
49954993
react-native-safe-area-context: "npm:^5.4.0"
49964994
react-native-svg: "npm:15.11.2"
49974995
react-test-renderer: "npm:19.0.0"
49984996
typescript: "npm:~5.8.3"
4997+
peerDependencies:
4998+
react: "*"
4999+
react-native: "*"
49995000
languageName: unknown
50005001
linkType: soft
50015002

@@ -5071,7 +5072,7 @@ __metadata:
50715072
languageName: node
50725073
linkType: hard
50735074

5074-
"acorn@npm:^8.8.2, acorn@npm:^8.9.0":
5075+
"acorn@npm:^8.14.0, acorn@npm:^8.9.0":
50755076
version: 8.14.1
50765077
resolution: "acorn@npm:8.14.1"
50775078
bin:
@@ -6507,14 +6508,14 @@ __metadata:
65076508
linkType: hard
65086509

65096510
"debug@npm:4, debug@npm:^4.0.0, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.3, debug@npm:^4.3.4, debug@npm:^4.3.5, debug@npm:^4.4.0":
6510-
version: 4.4.0
6511-
resolution: "debug@npm:4.4.0"
6511+
version: 4.4.1
6512+
resolution: "debug@npm:4.4.1"
65126513
dependencies:
65136514
ms: "npm:^2.1.3"
65146515
peerDependenciesMeta:
65156516
supports-color:
65166517
optional: true
6517-
checksum: 10c0/db94f1a182bf886f57b4755f85b3a74c39b5114b9377b7ab375dc2cfa3454f09490cc6c30f829df3fc8042bc8b8995f6567ce5cd96f3bc3688bd24027197d9de
6518+
checksum: 10c0/d2b44bc1afd912b49bb7ebb0d50a860dc93a4dd7d946e8de94abc957bb63726b7dd5aa48c18c2386c379ec024c46692e15ed3ed97d481729f929201e671fcd55
65186519
languageName: node
65196520
linkType: hard
65206521

@@ -7007,9 +7008,9 @@ __metadata:
70077008
linkType: hard
70087009

70097010
"electron-to-chromium@npm:^1.5.149":
7010-
version: 1.5.152
7011-
resolution: "electron-to-chromium@npm:1.5.152"
7012-
checksum: 10c0/99c58dc8fc6b22ea64f118599663a0d336aa28693fbd275d06f3e2c1d1a6c954fcb88f5b2390223267bb3487940d3e587b6acac8b1b2ebc4dc65c44cd7739c7c
7011+
version: 1.5.155
7012+
resolution: "electron-to-chromium@npm:1.5.155"
7013+
checksum: 10c0/aee32a0b03282e488352370f6a910de37788b814031020a0e244943450e844e8a41f741d6e5ec70d553dfa4382ef80088034ddc400b48f45de95de331b9ec178
70137014
languageName: node
70147015
linkType: hard
70157016

@@ -8444,9 +8445,9 @@ __metadata:
84448445
linkType: hard
84458446

84468447
"flow-parser@npm:0.*":
8447-
version: 0.270.0
8448-
resolution: "flow-parser@npm:0.270.0"
8449-
checksum: 10c0/5eb9d0fa1e489c180264f03d72a244407f3f071651ae0da9ed3843ab0a75ebfa5ffa01b3639b88aeb9e31994eeb1e8d4525c7890f9abc5ae6ceda2202d9f1922
8448+
version: 0.271.0
8449+
resolution: "flow-parser@npm:0.271.0"
8450+
checksum: 10c0/e5a1f8062c873fae9dd7f390a3e439b9fe59ccf4602fc582ad5795a58f13e0e7d2c3f0f521ed91d3c051c2368eb6daf1581bacca000189e3c2765e0f95cf3c65
84508451
languageName: node
84518452
linkType: hard
84528453

@@ -15264,12 +15265,12 @@ __metadata:
1526415265
linkType: hard
1526515266

1526615267
"synckit@npm:^0.11.0":
15267-
version: 0.11.4
15268-
resolution: "synckit@npm:0.11.4"
15268+
version: 0.11.5
15269+
resolution: "synckit@npm:0.11.5"
1526915270
dependencies:
15270-
"@pkgr/core": "npm:^0.2.3"
15271+
"@pkgr/core": "npm:^0.2.4"
1527115272
tslib: "npm:^2.8.1"
15272-
checksum: 10c0/dd2965a37c93c0b652bf07b1fd8d1639a803b65cf34c0cb1b827b8403044fc3b09ec87f681d922a324825127ee95b2e0394e7caccb502f407892d63e903c5276
15273+
checksum: 10c0/49cbd90c3f0ebe7ea6af2fe359e93ef737983b9aaaa605d63c3bf6ba7b31fd2d201e0d8c09f099a11d5ed2d5a7bf3a2ee865708f7f6795646317aac1266517aa
1527315274
languageName: node
1527415275
linkType: hard
1527515276

@@ -15312,16 +15313,16 @@ __metadata:
1531215313
linkType: hard
1531315314

1531415315
"terser@npm:^5.15.0":
15315-
version: 5.39.1
15316-
resolution: "terser@npm:5.39.1"
15316+
version: 5.39.2
15317+
resolution: "terser@npm:5.39.2"
1531715318
dependencies:
1531815319
"@jridgewell/source-map": "npm:^0.3.3"
15319-
acorn: "npm:^8.8.2"
15320+
acorn: "npm:^8.14.0"
1532015321
commander: "npm:^2.20.0"
1532115322
source-map-support: "npm:~0.5.20"
1532215323
bin:
1532315324
terser: bin/terser
15324-
checksum: 10c0/d49e06dd4dd03661dac41f45c9cf187b2aa3fe80775235e838398c29311705169387c007f398ab44cd1bd8f89b14a1eea383feaa95c1cae29e3f5b6b606b6b37
15325+
checksum: 10c0/f70462feddecf458ad2441b16b2969e0024f81c6e47207717a096cfa1d60b85e0c60a129b42c80bcb258c28ae16e4e6d875db8bb9df9be9b5bc748807c2916ba
1532515326
languageName: node
1532615327
linkType: hard
1532715328

@@ -16271,11 +16272,11 @@ __metadata:
1627116272
linkType: hard
1627216273

1627316274
"yaml@npm:^2.2.1":
16274-
version: 2.7.1
16275-
resolution: "yaml@npm:2.7.1"
16275+
version: 2.8.0
16276+
resolution: "yaml@npm:2.8.0"
1627616277
bin:
1627716278
yaml: bin.mjs
16278-
checksum: 10c0/ee2126398ab7d1fdde566b4013b68e36930b9e6d8e68b6db356875c99614c10d678b6f45597a145ff6d63814961221fc305bf9242af8bf7450177f8a68537590
16279+
checksum: 10c0/f6f7310cf7264a8107e72c1376f4de37389945d2fb4656f8060eca83f01d2d703f9d1b925dd8f39852a57034fafefde6225409ddd9f22aebfda16c6141b71858
1627916280
languageName: node
1628016281
linkType: hard
1628116282

0 commit comments

Comments
 (0)