Turborepo monorepo构建Expo app遇metro模块找不到错误求助
解决Turborepo Monorepo中
npx expo run:ios找不到metro/src/lib/TerminalReporter的问题 问题场景
在Turborepo monorepo环境下执行npx expo run:ios构建Expo应用时,出现以下错误:
Error: Cannot find module 'metro/src/lib/TerminalReporter' Require stack: - @expo/cli/build/src/start/server/metro/TerminalReporter.js - @expo/cli/build/src/start/server/metro/MetroTerminalReporter.js - @expo/cli/build/src/start/server/metro/instantiateMetro.js - @expo/cli/build/src/start/server/metro/MetroBundlerDevServer.js - @expo/cli/build/src/start/server/DevServerManager.js - @expo/cli/build/src/run/startBundler.js - @expo/cli/build/src/run/ios/runIosAsync.js - @expo/cli/build/src/run/ios/index.js - @expo/cli/build/bin/cli - expo/bin/cli
该错误仅出现在monorepo内的项目中,标准Expo仓库(非monorepo)执行npx expo run:ios可正常运行,且monorepo环境下执行npx expo start --ios也无异常。已完成Expo Monorepo指南中的配置,删除并重装node_modules后问题仍未解决。
解决方案
1. 锁定Metro相关依赖版本
monorepo中依赖版本不一致是常见诱因,将项目的Metro相关包版本锁定为与正常运行的非monorepo项目一致:
在项目的package.json的devDependencies中添加或指定版本:
"devDependencies": { "metro": "^0.76.0", "metro-core": "^0.76.0", "metro-react-native-babel-transformer": "^0.76.0" }
执行依赖安装命令:
npm install # 或 yarn install
2. 调整Metro配置确保模块解析正确
修改项目根目录的metro.config.js,配置resolver路径优先使用项目本地依赖:
const { getDefaultConfig } = require('expo/metro-config'); const path = require('path'); const config = getDefaultConfig(__dirname); // 添加本地及monorepo根目录的node_modules路径(根据你的monorepo结构调整层级) config.resolver.nodeModulesPaths = [ path.resolve(__dirname, 'node_modules'), path.resolve(__dirname, '../../node_modules') ]; // 禁用依赖层级查找,强制使用项目本地的Metro版本 config.resolver.disableHierarchicalLookup = true; module.exports = config;
3. 用Expo命令修复依赖不匹配
执行Expo官方的依赖修复命令,自动调整兼容版本:
npx expo install --fix
4. 调整Turborepo缓存配置
在monorepo根目录的turbo.json中,确保run:ios任务不缓存依赖相关内容,且依赖前置安装任务:
{ "pipeline": { "run:ios": { "dependsOn": ["^install"], "outputs": [] } } }
问题原因
monorepo的依赖扁平化机制可能导致Expo CLI加载了不兼容的Metro版本,或模块路径解析错误。npx expo start --ios与npx expo run:ios使用的Metro初始化逻辑不同,前者能规避路径问题,后者则触发了模块查找失败。
内容的提问来源于stack exchange,提问作者Adam Sucharda
相关产品推荐
相关产品推荐

