[object Object]

← 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

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 →