npm中package.json与package-lock.json的区别

package.json在npm中实际用途参考:npm基本使用这篇文章,接下来主要讲解package-lock.json用途以及与package.json的不同

npm 5以前没有package-lock.json这个文件,需要保存依赖信息,每次安装时都要加上--save参数;npm5以后版本加入了package-lock.json文件。当安装包的时候,不需要加上--save参数,它会自动保存依赖信息,且会生成或更新package-lock.json这个文件。

package-lock.json出现有啥用途呢?

当我们需要下载某一个包的时候,比如:npm install art-template,实际上不止下载了art-template一个包,还会下载art-template包的依赖包,以及其依赖包所依赖的各种包。查看art-template的package.json文件可以看到art-template的依赖包:

atr-template

所以当我们删除node_modules时,想要使用npm install通过package.json文件恢复项目中所使用的相关的包时,整体工作流程是:查询package.json文件中要下载的包的下载地址,并下载,然后从当前下载后的包的package.json文件去查询还需要下载的依赖包,根据依赖包的地址再去下载依赖包。而这个查找的过程在有很多依赖包的情况下,下载的速度会明显下降,而此时,package-lock.json就派上了用途,这个文件保存了node_modules中所有的包(包括当前下载的包以及依赖包)的信息:版本、下载地址(这个信息在一开始第一次安装包时就写入了package-lock.json文件中)。这样当npm install 的时候直接从当前文件根据下载地址直接下载,而不再每次都先下载当前的包,再查询当前包的package.json文件再去下载。从而下载速度大大提升。

我们再来看一种情况:在实际项目开发过程中,并不是最新版本的包是适合于当前项目的创建的,因此如果一个项目依赖了1.1.1版本,当你重新npm install的时候其实会下载最新版本,也不是1.1.1,也这也并不是我们想要的结果,而我们的目的主要想要锁住1.1.1这个版本,而package-lock.json这个文件在这个时候开始起作用,其可以锁定版本号,防止自动升级新版本,也就是说在package-lock.json中配置的版本号如果低于最新版本号,但是在npm install的时候也不会升级版本号,从而让package-lock.json文件名中的lock名副其实。

总结:

package.json记录的是当前项目中你下载了哪些包(也即npm install xx 的包信息),记录了你下载的包信息(地址、版本号等),不包含依赖包信息。

package-lock.json文件记录的是当前项目中你下载了哪些包以及你下载的这些包的各种依赖包信息,包括地址、版本号等。主要作用有以下两点:

  • 当删除node_module目录时,想通过npm install恢复所有包时,提升下载速度。
  • 锁定版本号,防止自动升级新版本

猜你喜欢

转载自blog.csdn.net/chen__cheng/article/details/114833847