yarn.lock是⼲什么的
概述
今天本地运⾏尤⼤的,使⽤ yarn 命令安装,报错提⽰ node 版本必须⼤于7⼩于9,如下所⽰:
error upath@1.0.4: The engine "node" is incompatible with this module. Expected version ">=4 <=9". error Found incompatible module
然后我到 package.json ⽂件⾥⾯去看,明明只说了 node 要⼤于7,没有说要⼩于9啊。于是我去找 issue,发现竟。看了下他的解决⽅法,原来是 yarn.lock 的原因。
于是我查了下 yarn.lock 的资料,记录下来,供以后开发时参考,相信对其他⼈也有⽤。
yarn.lock
官⽅对 yarn.lock ⽂件的说明如下:
为了跨机器安装得到⼀致的结果,Yarn 需要⽐你配置在 package.json 中的依赖列表更多的信息。 Yarn 需要准确存储每个安装的依赖是哪个版本。
为了做到这样,Yarn 使⽤⼀个你项⽬根⽬录⾥的 yarn.lock ⽂件。这可以媲美其他像 Bundler 或 Cargo 这样的包管理器的 lockfiles。它类似于 npm 的 npm-shrinkwrap.json,然⽽他并不是有损的并且它能创建可重现的结果。需要注意的是:所有 yarn.lock ⽂件应该被提交到版本控制系统。
npm-shrinkwrap.json
上⾯说到了 npm-shrinkwrap.json,那 npm-shrinkwrap.json ⼜是什么呢?
通过查资料,简单来说,它是由命令 npm shrinkwrap ⽣成的,它的作⽤和 package-lock.json 的作⽤是⼀样的,都是⽤来锁定版本⽤的。现在有了 package-lock.json 之后就不
怎么⽤ npm-shrinkwrap.json 了。
解决问题
那么⼀开始我遇到的问题是什么原因呢?怎么解决呢?
再次摘抄报错提⽰如下:
error upath@1.0.4: The engine "node" is incompatible with this module. Expected version ">=4 <=9". error Found incompatible module
那就很简单了,原因是 upath@1.0.4 这个库只⽀持 >=4 <=9 的 node。那这个库 upath@1.0.4 锁定版本在 1.0.4 了,猜测是因为 yarn.lock ⾥⾯锁定了,所以去⾥⾯找,果然找到
了。
所以解决⽅法有3个:
1. 修改 yarn.lock ⽂件,把 upath 的版本改成最新版本,再 yarn ⼀遍。
2. 删掉 yarn.lock ⽂件⾥⾯关于 upath@1.0.4 的信息,再 yarn ⼀遍。
3. 直接删掉 yarn.lock ⽂件,再 yarn ⼀遍。