React Native项目能否无缝从Yarn切换到NPM?两者共存有无问题
React Native 项目Yarn切换NPM、多包管理器共存问题解答
Yarn管理的老RN项目切换到NPM的操作说明
直接删除yarn.lock后执行npm install的操作有概率出问题,尤其你的项目已经1-2年未更新,还计划做全量依赖升级,不要直接这么操作,按下面的步骤来更稳妥:
- 操作前先做基线备份:先在原有Yarn环境下把项目跑通,备份当前能正常运行的代码分支、原
yarn.lock文件、node_modules目录,出问题可以快速回滚。老RN项目的依赖嵌套关系复杂,锁文件里记录的版本和package.json里声明的版本往往有很大偏差,没有基线很容易排查问题到一半找不到参照。 - 清理旧依赖残留:除了删除根目录的
yarn.lock,还要把整个node_modules文件夹完全删除,避免Yarn安装的依赖残留和NPM的扁平化安装逻辑冲突。如果项目根目录存在.yarnrc、Yarn Workspaces相关配置,要对应调整为NPM兼容的.npmrc配置、NPM Workspaces规则。 - 执行安装与校验:在项目根目录运行
npm install,等安装完成后先检查是否生成了完整的package-lock.json,留意安装过程中postinstall脚本的报错——老RN项目的很多原生依赖会在安装阶段执行原生链接脚本,很容易因为环境版本问题报错。安装完成后iOS端需要进入ios目录重新执行pod install同步原生依赖,再分别跑安卓、iOS端验证功能正常。 - 升级节奏建议:不要把切包管理器和全量依赖升级放在同一步操作,先切包管理器确认项目在原有依赖版本下能正常运行,再按照React Native官方的升级指引逐版本迭代依赖,不然出问题你没法定位是包管理器切换导致的,还是依赖版本升级导致的。
- 脚本排查:全量检查项目里的CI脚本、本地启动脚本、package.json里的scripts字段,把写死的
yarn命令替换成对应的npm命令,避免后续跑流程的时候调用错包管理器。
全局同时安装NPM与Yarn的兼容性说明
完全可以在设备全局同时安装NPM和Yarn,二者不会引发全局层面的异常,完全支持不同项目按需选择对应包管理器使用,相关注意点如下:
- NPM是随Node.js自带的包管理器,Yarn是独立安装的工具,二者的全局包安装路径、缓存路径、命令解析逻辑都是完全独立的,只要安装过程中没有改坏系统环境变量,安装完成后执行
npm -v、yarn -v都能正常返回版本号就可以正常使用,不会出现命令互相覆盖、全局包冲突的问题。 - 唯一容易踩的坑是单个项目内部混用包管理器:比如同一个项目里一会用
npm install装包,一会用yarn add装包,会导致项目里同时存在package-lock.json和yarn.lock两个锁文件,两个锁文件记录的依赖版本不一致,很容易出现不同设备安装出来的依赖树不一样、本地能跑其他环境跑不起来的问题。 - 要避免单项目混用包管理器很简单,可以在项目根目录的
.npmrc里开启engine-strict=true,同时在package.json的engines字段里声明当前项目要求使用的包管理器,也可以加preinstall拦截脚本,检测到用户用错包管理器的时候直接报错提示,从流程上避免混用。
内容的提问来源于stack exchange,提问作者ttsssss
相关产品推荐
相关产品推荐

