运行yarn ios时先后缺失metro-config、metro-transform-worker包报错如何解决?
问题根因说明
第一个报错本质是项目依赖树不完整,metro-config是react-native的内置依赖,不需要单独安装,你手动安装了不匹配版本的metro-config才触发了第二个报错:Yarn PnP模式对依赖声明检查严格,你安装的metro-config@0.66.2本身的依赖声明里没有包含metro-transform-worker,就会抛出访问歧义的错误。
具体解决步骤
步骤1:回退错误操作,清理环境
- 先删除你手动添加到
package.json里的metro-config依赖项 - 执行以下命令清理缓存和现有无效依赖:
rm -rf node_modules .yarn/cache yarn.lock .pnp.cjs .pnp.loader.mjs
步骤2:校验依赖版本匹配性
- 确认项目
package.json里已经正确添加了react-native和对应版本的expo依赖,版本要和你创建项目时的expo版本匹配,示例参考:
"dependencies": { "expo": "~45.0.0", // expo v45对应的默认metro-config版本就是0.66.x,版本匹配就不会出现依赖缺失问题 "react-native": "0.68.2", // 其余项目原有依赖 }
- 如果全局安装的expo cli版本过旧,可执行
npm install -g expo-cli@latest升级到匹配版本。
步骤3:重新安装依赖
- 执行
yarn install完整安装所有依赖,不要单独安装单个依赖包 - 如果你使用的是Yarn 3+的PnP模式,需要在
.yarnrc.yml里添加packageExtensions配置补全metro-config的缺失依赖声明,避免后续再触发同类报错:
packageExtensions: "metro-config@0.66.2": dependencies: "metro-transform-worker": "0.66.2"
添加完配置后再执行一次yarn install让配置生效。
步骤4:重新执行启动命令
优先使用expo官方启动命令运行项目:
npx expo start --ios # 如果package.json的scripts里已经配置了"ios": "expo start --ios",可直接执行yarn ios
内容的提问来源于stack exchange,提问作者Richard Ijitola
相关产品推荐
相关产品推荐

