将Expo SDK从44升级至45/46/47失败,node_modules丢失求助
Expo SDK升级失败(node_modules丢失)的解决方案
核心问题
自动升级脚本删除了node_modules和package-lock.json,但关键的npm install步骤执行失败,导致没有重新生成依赖目录,后续清理缓存时自然找不到expo/package.json。解决npm install失败是核心。
具体修复步骤
1. 查看详细错误日志
打开项目根目录下的npm-error.log,定位npm install失败的具体原因(比如依赖版本冲突、网络超时、权限不足等)。常见报错点包括:
- 未更新的第三方包(如
@react-navigation系列、react-native-paper)与目标SDK版本不兼容 - 网络问题导致依赖包下载失败
- 本地npm缓存损坏
2. 彻底清理残留文件
执行以下命令确保所有旧依赖和锁文件被完全清理:
rm -rf node_modules package-lock.json yarn.lock npm cache clean --force
3. 处理未兼容的第三方包
升级脚本列出的未更新包大概率是依赖冲突的源头,需要:
- 逐个查看这些包的官方文档,确认支持目标SDK版本的具体版本号
- 在
package.json中手动指定兼容版本,例如:@react-navigation/native需适配对应SDK的版本(如SDK46对应6.x系列)react-native-paper需匹配当前react-native版本(SDK46对应react-native 0.69.x)
4. 手动分步安装依赖
先单独安装Expo核心包,再安装其余依赖,降低冲突概率:
# 先安装expo核心包 npm install expo@46 # 再安装其余依赖 npm install
5. 解决权限或网络问题
- 若macOS/Linux出现权限报错,尝试添加参数:
npm install --unsafe-perm - 若网络下载慢或失败,切换国内npm源:
npm config set registry https://registry.npmmirror.com/ npm install - 也可以尝试用yarn代替npm,依赖解析逻辑更稳定:
yarn install
6. 避免跨版本跳跃升级
从SDK44直接跳到46/47容易引发大量依赖冲突,建议分步升级:
- 先升级到SDK45,执行
expo upgrade 45,确认依赖安装成功、项目能正常运行 - 再从SDK45升级到目标版本,重复验证流程
内容的提问来源于stack exchange,提问作者sinan_u
相关产品推荐
相关产品推荐

