Files
byGalax d9f3c6c562 fix(mobile): enable Metro package-exports resolution for @chat-app/shared
apps/mobile/lib/supabase.ts imports '@chat-app/shared/supabase'. The
shared package declares this subpath in its package.json "exports"
map. The dev Metro resolver respected it; the eager exporter used by
preview/production builds defaulted to legacy resolution and 404'd on
the subpath.

unstable_enablePackageExports=true makes Metro use Node's modern
exports-aware resolver in both modes. Despite the 'unstable_' prefix,
it's the recommended setting in Expo SDK 52 monorepos.
2026-05-15 02:00:29 +02:00

28 lines
1.1 KiB
JavaScript

// Metro config for Expo inside a pnpm monorepo.
// Key points:
// - Watch the repo root so workspace packages (@chat-app/shared, db-types) are seen.
// - Disable hierarchical lookup so Metro uses only the hoisted/workspace node_modules.
// - Add nodeModulesPaths so symlinked workspace deps resolve.
const { getDefaultConfig } = require('expo/metro-config');
const path = require('path');
const projectRoot = __dirname;
const workspaceRoot = path.resolve(projectRoot, '../..');
const config = getDefaultConfig(projectRoot);
config.watchFolders = [workspaceRoot];
config.resolver.nodeModulesPaths = [
path.resolve(projectRoot, 'node_modules'),
path.resolve(workspaceRoot, 'node_modules'),
];
config.resolver.disableHierarchicalLookup = true;
// Make Metro honor the "exports" field in package.json. @chat-app/shared
// maps subpaths like "./supabase" -> "./src/supabase/index.ts" via exports;
// without this flag the eager bundler (preview/production) ignores them
// and falls back to legacy main-only resolution, which 404s on subpaths.
config.resolver.unstable_enablePackageExports = true;
module.exports = config;