使用expo cli≥4.8.0启动项目报错Cannot find module '@expo/metro-config'求助
问题根源
- expo-cli 4.8.0及以上版本存在全局安装依赖缺失bug:该版本迭代时未将
@expo/metro-config、resolve-from、kleur等间接依赖正确纳入全局安装的依赖树,执行npm install -g expo-cli时不会自动安装这些依赖,导致运行相关命令时逐次抛出模块找不到的报错。 - 全局expo-cli版本与项目SDK版本不兼容:你使用的SDK 42仅适配4.7.x分支的expo-cli,4.8.0及以后的cli版本默认适配更高版本的SDK,对旧版本SDK做了破坏性兼容调整,因此即使单独安装缺失的依赖,也会陆续出现其他依赖缺失的报错。
- 全新npm环境下的安装逻辑也验证了该问题的存在:全新环境安装4.8.0+版本expo-cli后运行
expo init也会报kleur模块缺失,进一步确认是cli版本本身的依赖打包缺陷。
可落地解决方案
- 针对SDK 42的存量项目,优先使用匹配版本的expo-cli
先卸载当前全局安装的高版本expo-cli:
再安装兼容的指定版本:npm uninstall -g expo-cli
该版本与SDK 42完全适配,不会出现依赖缺失的报错。npm install -g expo-cli@4.7.3 - 若需要使用高版本expo-cli,可手动补全全局缺失依赖
执行全局安装命令补全所有缺失依赖:
安装完成后即可正常运行启动命令,注意该方案仅解决依赖缺失问题,仍可能存在高版本cli与旧SDK的功能兼容性问题。npm install -g @expo/metro-config resolve-from kleur - 项目级别兜底方案
不需要修改metro.config.js,直接在项目本地安装缺失的开发依赖即可:
项目启动时会优先读取本地node_modules中的依赖包,也可解决报错。npm install -D @expo/metro-config resolve-from kleur - 长期方案建议将项目SDK升级至44及以上版本,新版SDK对应更高版本的expo-cli已修复该依赖缺失bug,可直接使用最新版cli。
内容的提问来源于stack exchange,提问作者Ryan Pergent
相关产品推荐
相关产品推荐

