为何旧React Native项目出现异常?三个月前正常如今报错原因探究
本地开发环境的隐性变更
项目里的build.gradle和package.json版本虽然固定,但本地的JDK、Android SDK Build Tools、Node.js这些基础工具可能已经悄悄更新。比如Android SDK的组件自动升级后,和项目指定的Gradle版本不兼容;Node.js大版本更新后,依赖包的底层运行逻辑可能出现冲突。另外,系统环境变量(比如ANDROID_HOME)如果被修改,也会导致Gradle找不到指定的SDK资源。依赖包的间接依赖冲突
package.json里锁的是直接依赖版本,但依赖包自身的间接依赖(也就是node_modules里嵌套的包)如果没通过package-lock.json或yarn.lock锁定,重新安装依赖时会拉取最新的间接依赖版本,这些新版本很可能和原项目的依赖逻辑不兼容。就算锁定了间接依赖,部分依赖包可能存在远程仓库版本撤回或变更的情况(比如作者发布问题版本后又删除,但本地缓存失效),导致安装的包和三个月前不一致。Gradle缓存与网络问题
Gradle会缓存依赖和构建产物,但如果缓存损坏(比如磁盘空间不足导致文件损坏),重新构建时就会出现各种奇怪的错误。另外,网络环境变化(比如代理设置变更、镜像源失效)会导致Gradle无法正常拉取指定版本的依赖包,只能拉取本地缓存中没有的替代版本,进而引发构建失败。Android构建工具的隐性逻辑变更
哪怕项目里的build.gradle配置没改,Android Studio或Gradle插件的自动更新可能带来了隐性的行为变化。比如新版Gradle插件对某些配置的校验更严格,或者默认行为调整,导致旧配置不再适用。还有Android SDK Platform Tools版本更新后,adb的通信协议变化,也会导致设备连接或安装APK时出错。系统层面的变更
操作系统的大版本更新(比如Windows、macOS的系统升级)可能改变了文件权限、网络策略,或者影响了Node.js、JDK等工具的正常运行。比如macOS升级后,安全策略阻止了某些脚本执行,导致依赖安装失败。
内容的提问来源于stack exchange,提问作者Nemesis

