21-npm install和cnpm install的区别

npm 5 版本,在延续 npm 3 扁平化依赖包安装方式的基础上,新增了一个package-lock.json文件。package-lock.json的主要作用就是锁定依赖项的安装目录和依赖包的版本信息。

如果package-lock.json存在,则两者安装后结果可能不一样。因为cnpm install安装时,是不会去从package-lock.json中读取依赖包的版本信息的。

当我们执行npm install的时候,node会从package.json文件读取模块名称,从package-lock.json文件中获取版本号。而cnpm install是不会去pack-lock.json中获取任何信息的,它只会根据各依赖包的配置下载对应版本的包。

package.json与package-lock.json文件的作用

package.json文件记录你项目中所需要的所有模块。

当你执行npm install的时候,node会先从package.json文件中读取所有dependencies信息,然后根据dependencies中的信息与node_modules中的模块进行对比,没有的直接下载,已有的检查更新(最新版本的nodejs不会更新,因为有package-lock.json文件,下面再说)。

另外,package.json文件只记录你通过npm install方式安装的模块信息,而这些模块所依赖的其他子模块的信息不会记录。

package-lock.json文件锁定所有模块的版本号,包括主模块和所有依赖子模块。

当你执行npm install的时候,node从package.json文件读取模块名称,从package-lock.json文件中获取版本号,然后进行下载或者更新。

因此,正因为有了package-lock.json文件锁定版本号,所以当你执行npm install的时候,node不会自动更新package.json文件中的模块,必须用npm install packagename(自动更新小版本号)或者npm install packagename@x.x.x(指定版本号)来进行安装才会更新,package-lock.json文件中的版本号也会随着更新。

附:当package.json与package-lock.json都不存在,执行”npm install”时,node会重新生成package-lock.json文件,然后把node_modules中的模块信息全部记入package-lock.json文件,但不会生成package.json文件,此时,你可以通过”npm init –yes”来生成package.json文件

cnpm不支持,且不打算支持lock:为什么我不使用 shrinkwrap(lock)

如果不使用cnpm,又想加快下载速度,可以使用镜像,如:

npm –registry=https://registry.npm.taobao.org i


21-npm install和cnpm install的区别
https://flepeng.github.io/021-frontend-nodejs-13-包管理-01-nodejs-npm-21-npm-install和cnpm-install的区别/
作者
Lepeng
发布于
2021年8月4日
许可协议