← back to Nineoh Guide
fix(monorepo): keep isolated nodeLinker (web React 19 intact), add @babel/runtime as explicit mobile dep for Metro resolution
fd94bbdcc606c0ffac13a5ae8fb696611c8a561f · 2026-07-27 11:03:06 -0700 · Steve Abrams
Files touched
A app.jsonM apps/mobile/package.jsonM pnpm-lock.yamlM pnpm-workspace.yaml
Diff
commit fd94bbdcc606c0ffac13a5ae8fb696611c8a561f
Author: Steve Abrams <steve@designerwallcoverings.com>
Date: Mon Jul 27 11:03:06 2026 -0700
fix(monorepo): keep isolated nodeLinker (web React 19 intact), add @babel/runtime as explicit mobile dep for Metro resolution
---
app.json | 3 +++
apps/mobile/package.json | 1 +
pnpm-lock.yaml | 3 +++
pnpm-workspace.yaml | 9 ++++-----
4 files changed, 11 insertions(+), 5 deletions(-)
diff --git a/app.json b/app.json
new file mode 100644
index 0000000..c9e8c8a
--- /dev/null
+++ b/app.json
@@ -0,0 +1,3 @@
+{
+ "expo": {}
+}
\ No newline at end of file
diff --git a/apps/mobile/package.json b/apps/mobile/package.json
index ebb76d8..1f96de6 100644
--- a/apps/mobile/package.json
+++ b/apps/mobile/package.json
@@ -10,6 +10,7 @@
"doctor": "expo-doctor"
},
"dependencies": {
+ "@babel/runtime": "^7.29.0",
"@nineoh/core": "workspace:*",
"@react-native-async-storage/async-storage": "1.23.1",
"expo": "~52.0.0",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 930db21..9673822 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -18,6 +18,9 @@ importers:
apps/mobile:
dependencies:
+ '@babel/runtime':
+ specifier: ^7.29.0
+ version: 7.29.7
'@nineoh/core':
specifier: workspace:*
version: link:../../packages/core
diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml
index d51fc27..e751e43 100644
--- a/pnpm-workspace.yaml
+++ b/pnpm-workspace.yaml
@@ -3,8 +3,7 @@ packages:
- "packages/*"
allowBuilds:
sharp: true
-# React Native / Metro cannot traverse pnpm's isolated .pnpm symlink store to
-# resolve transitive deps (e.g. @babel/runtime), so the Expo/EAS "Bundle
-# JavaScript" phase fails. Hoist to a flat node_modules. (pnpm 11 reads this
-# from pnpm-workspace.yaml, NOT .npmrc.) Safe for Next.js web + Vercel + Turbo.
-nodeLinker: hoisted
+# NOTE: nodeLinker stays ISOLATED (pnpm default). Hoisting collapses the two
+# React versions (web=19, mobile=18.3.1) and breaks Next's build. Instead the
+# mobile app lists the transitive deps Metro needs (e.g. @babel/runtime) as
+# explicit dependencies so they land in apps/mobile/node_modules.
← e8b0cf6 feat: mobile bottom-tab nav (Episodes/Cast/News/Saved) + /ap
·
back to Nineoh Guide
·
chore: quality gate — log+500 on api/cast+news error paths, ebc361f →