← back to Nineoh Guide
auto-save: 2026-07-27T10:19:40 (2 files) — .npmrc apps/mobile/metro.config.js
8a2cd67942bff3a4d259a8b3b80ea013d9e08c8e · 2026-07-27 10:19:47 -0700 · Steve Abrams
Files touched
M .npmrcA apps/mobile/metro.config.js
Diff
commit 8a2cd67942bff3a4d259a8b3b80ea013d9e08c8e
Author: Steve Abrams <steve@designerwallcoverings.com>
Date: Mon Jul 27 10:19:47 2026 -0700
auto-save: 2026-07-27T10:19:40 (2 files) — .npmrc apps/mobile/metro.config.js
---
.npmrc | 5 +++++
apps/mobile/metro.config.js | 22 ++++++++++++++++++++++
2 files changed, 27 insertions(+)
diff --git a/.npmrc b/.npmrc
index d099685..fd590fb 100644
--- a/.npmrc
+++ b/.npmrc
@@ -1 +1,6 @@
verify-deps-before-run=false
+# React Native / Metro cannot traverse pnpm's isolated .pnpm symlink store to
+# resolve transitive deps (e.g. @babel/runtime). Hoist to a flat node_modules
+# so the Expo/EAS "Bundle JavaScript" phase can resolve them. Safe for the
+# Next.js web app + Vercel + Turborepo, which all handle a hoisted layout.
+node-linker=hoisted
diff --git a/apps/mobile/metro.config.js b/apps/mobile/metro.config.js
new file mode 100644
index 0000000..bf84b39
--- /dev/null
+++ b/apps/mobile/metro.config.js
@@ -0,0 +1,22 @@
+// Metro config for the Expo app inside the nineoh-guide pnpm/Turborepo monorepo.
+// Learn more: https://docs.expo.dev/guides/monorepos/
+const { getDefaultConfig } = require("expo/metro-config");
+const path = require("path");
+
+const projectRoot = __dirname;
+const monorepoRoot = path.resolve(projectRoot, "../..");
+
+const config = getDefaultConfig(projectRoot);
+
+// 1. Watch the whole monorepo so Metro can see packages/core (@nineoh/core),
+// which lives outside apps/mobile.
+config.watchFolders = [monorepoRoot];
+
+// 2. Resolve modules from the app first, then the hoisted monorepo root
+// (where node-linker=hoisted places transitive deps like @babel/runtime).
+config.resolver.nodeModulesPaths = [
+ path.resolve(projectRoot, "node_modules"),
+ path.resolve(monorepoRoot, "node_modules"),
+];
+
+module.exports = config;
← 33f7f03 chore(mobile): eas init (project d1c16075) + wire EXPO_PUBLI
·
back to Nineoh Guide
·
fix(mobile): pnpm 11 honors nodeLinker in pnpm-workspace.yam 904b355 →