heweiqun

记一次yarn和npm混用导致的问题

接手项目的时候,只有package-lock.json文件,由于个人习惯用yarn包管理工具,于是项目便有了两个版本锁定文件:package-lock.json和yarn.lock,在后续的项目开发过程中,并没有出现依赖版本冲突问题,遂没有管这个事情。

直到在用jenkies部署前端过程中,出现了问题。由于未知原因,在构建脚本中,一开始是用npm i 下载依赖,但是失败,换成yarn,是可以成功的。

某次在本地运行项目出现了一个警告:

大意是,Browserslist和caniuse-lite依赖需要更新,按照提示执行npx browserlist@latest  --update-db依旧报错,删除package-lock,json和node_moudles,重新npm i ,成功解决

但是jenkies构建时,控制台输出依旧会有这个警告:

讲道理,每次构建都会拉取最新分支,docker拉取的node环境镜像和本地版本什么的都是一致的,并且如果docker检测到package.json变化,也会重新下载依赖,保持构建版本和本地版本一致,但是当时排期紧张,该警告并不影响项目运行,就没有仔细研究。

闲下来,可以仔细看下这个问题了,对比本地和docker容器的不同,大概就是本地是用npm i 下载依赖,jenkies脚本则是yarn 下载依赖,所以解决办法是在本地又重新删除了node_moudles和yarn.lock文件,再用yarn下载node_modules,这样

的话,package-lock.json和yarn.lock就保持一致了,重新推送分支,再次构建,jenkies的控制台输出没有警告了。

此外,因为某些插件版本过低,在项目运行时,控制台里会有升级的警告和建议,若本地使用npm进行升级,在我的jenkies(我的jenkies使用的是yarn)构建过程中依然会有警告,还需在本地用yarn更新一下插件,有些繁琐。

最后,使用npm和yarn下载依赖都会依照package.json,但是package-lock.json只对npm起作用,yarn.lock只对yarn起作用,因此npm和yarn混用会有概率发生依赖版本冲突的问题,特别是在这样的情况下:主分支和副分支使用不同的包管理工具,切换分支后会有概率报错。怎么解决?要么在项目最开始就想好使用什么包管理工具,如果就是要混用,那么就保持package-lock.json和yarn.lock文件的依赖版本保持一致。

 

posted on 2023-02-06 16:45  浪漫是个锤子  阅读(2735)  评论(0编辑  收藏  举报

导航