关于npm的lock机制

425 阅读1分钟

首先我们得明白这个: package.json中库的版本号详解:

  • ~ 匹配最近的小版本依赖包,比如~1.2.3会匹配所有1.2.x版本,但是不包括1.3.0
  • ^ 匹配最新的大版本依赖包,比如^1.2.3会匹配所有1.x.x的包,包括1.3.0,但是不包括2.0.0
  • *意味着安装最新版本的依赖包

原理图:

image.png

栗子:

首先我们npm init一个目录用来测试

在这里插入图片描述


安装npm install lodash@4.11.1生成了对应文件以及锁包lock文件

在这里插入图片描述


可见我们安装的版本是我们想要的4.11.1版本:

安装的实际版本


lock文件里面也声明了对应的版本号:

lock文件


ok现在刚刚安装的包已经在缓存里了 我们删除node_modules文件夹重新执行npm install

在这里插入图片描述


因为lock文件的存在 且前面安装过一次的那个版本符合 ^ 符号的版本范围 所以会直接从缓存取 所以版本依然是正确的

在这里插入图片描述


那么lock不存在呢?版本还正确吗? 现在我们删除node_modules以及package-lock.json,只留一个package.json用来npm install,看看安装版本还准不准确。

在这里插入图片描述


重新执行完npm install后同样生成了以下文件:

在这里插入图片描述


那么版本正确吗 是我们想要的4.11.1吗?

很明显更新到了4.x.x的最新版本了 不是我们想要的版本 因为lock文件不存在就会直接从registry仓库取符合版本符号最新的版本

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

注:npm从版本5开始支持锁包 可以用npm -v查看自己的npm版本。 注:cnpm目前不支持锁包。