2021-07-10 yarn.lock版本依赖策略

本文探讨了在项目开发中,yarn.lock文件如何解决因依赖冲突产生的不同版本问题,重点介绍了yarn的优化特性,如并行安装、离线模式和版本锁定。
简介

npm/yarn lock真香

在项目开发过程中,经常会出现yarn.lock里出现两个版本的情况,比如:

autoprefixer@^9.8.0, autoprefixer@^9.8.6:
  version "9.8.6"
  resolved "http://registry.npm.qima-inc.com/autoprefixer/download/autoprefixer-9.8.6.tgz#3b73594ca1bf9266320c5acf1588d74dea74210f"
  integrity sha1-O3NZTKG/kmYyDFrPFYjXTep0IQ8=
  dependencies:
    browserslist "^4.12.0"
    caniuse-lite "^1.0.30001109"
    colorette "^1.2.1"
    normalize-range "^0.1.2"
    num2fraction "^1.2.2"
    postcss "^7.0.32"
    postcss-value-parser "^4.1.0"
  1. 之所以会出现两个版本,是因为比如我们在项目的package.json里装了autoprefixer@^9.8.0,同时我们依赖的其他库 比如stylelint@^13.7.2 依赖autoprefixer@^9.8.6,那么这里会存在两个版本。此时yarn内部会根据npm的版本管理规范semVersion,得出version "9.8.6"作为最终版本。
  2. ^表示大版本固定,后续版本可升级。比如^9.8.0即为9.8.0~9.x.x,大版本在9且不低于9.8.0即可
  3. 需要注意的是,如果大版本号为 0,次版本也会被锁定。比如^0.3.2即为0.3.2~0.3.x,因为对于开发版本来说,次版本的改动也可能会引起兼容问题
  4. 如果两个npm包semVersion不兼容,则会存在两种版本。

yarn 的主要优化 yarn 的出现主要做了如下优化:

并行安装:无论 npm 还是 yarn 在执行包的安装时,都会执行一系列任务。npm 是按照队列执行每个
package,也就是说必须要等到当前 package 安装完成之后,才能继续后面的安装。而 yarn 是同步执行所有任务,提高了性能。
离线模式:如果之前已经安装过一个软件包,用 yarn 再次安装时之间从缓存中获取,就不用像 npm 那样再从网络下载了。
安装版本统一:为了防止拉取到不同的版本,yarn 有一个锁定文件 (lock file)
记录了被确切安装上的模块的版本号。每次只要新增了一个模块,yarn 就会创建(或更新)yarn.lock
这个文件。这么做就保证了,每一次拉取同一个项目依赖时,使用的都是一样的模块版本。 更好的语义化: yarn 改变了一些 npm
命令的名称,比如 yarn add/remove,比 npm 原本的 install/uninstall 要更清晰。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值