简介
在项目开发过程中,经常会出现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"
- 之所以会出现两个版本,是因为比如我们在项目的
package.json里装了autoprefixer@^9.8.0,同时我们依赖的其他库 比如stylelint@^13.7.2依赖autoprefixer@^9.8.6,那么这里会存在两个版本。此时yarn内部会根据npm的版本管理规范semVersion,得出version "9.8.6"作为最终版本。 ^表示大版本固定,后续版本可升级。比如^9.8.0即为9.8.0~9.x.x,大版本在9且不低于9.8.0即可- 需要注意的是,如果大版本号为 0,次版本也会被锁定。比如
^0.3.2即为0.3.2~0.3.x,因为对于开发版本来说,次版本的改动也可能会引起兼容问题 - 如果两个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 要更清晰。
本文探讨了在项目开发中,yarn.lock文件如何解决因依赖冲突产生的不同版本问题,重点介绍了yarn的优化特性,如并行安装、离线模式和版本锁定。
2480

被折叠的 条评论
为什么被折叠?



