Expo SDK37升级至45报错npm exited with non-zero code:190如何解决
问题根因
npm exited with non-zero code: 190 是依赖解析冲突导致的安装中断。你直接从SDK37跨8个大版本升级到SDK45,当前项目内留存的Expo生态依赖、本地安装的CLI工具均为SDK37时期的旧版本,和SDK45的版本要求完全不兼容,npm v7+默认开启的严格peer依赖校验会直接终止安装流程。
修复步骤
- 清理项目旧依赖文件
先删除项目目录下的依赖目录和锁文件,避免旧锁文件的版本约束干扰安装:# macOS/Linux rm -rf node_modules package-lock.json # Windows PowerShell Remove-Item -Recurse -Force node_modules, package-lock.json - 处理冗余CLI依赖
全局安装SDK45对应的稳定版expo-cli:
打开项目npm install -g expo-cli@5.4.12package.json,删除cli、eas、eas-cli、expo-cli四个字段,这类工具不需要本地安装,旧版本本地依赖会直接导致升级流程异常。 - 修正核心依赖版本
将package.json中Expo相关核心依赖替换为SDK45匹配的版本范围:
非核心第三方依赖可以暂时注释,等核心环境跑通后再逐个恢复适配。"expo": "~45.0.0", "expo-ads-admob": "~13.0.0", "expo-asset": "~8.5.0", "expo-font": "~10.1.0" - 重新安装依赖
执行安装命令时添加--legacy-peer-deps参数,临时跳过严格peer依赖校验,解决跨版本冲突问题:npm install --legacy-peer-deps - 校验升级结果
依赖安装完成后执行校验命令:
按照命令提示修复剩余不兼容依赖,所有校验项通过后执行expo doctorexpo start验证项目启动正常即可。
补充说明
- SDK45要求Node.js最低版本为14.18.0,如果当前Node版本低于该要求,先升级Node.js再执行上述步骤。
- 如果安装过程中持续报缓存相关错误,执行
npm cache clean --force清理npm缓存后重试。 - 跨大版本升级不建议一次跳过多版本,后续升级可以逐版本迭代,降低依赖冲突概率。
内容的提问来源于stack exchange,提问作者er123
相关产品推荐
相关产品推荐

