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的依赖包:
所以当我们删除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
恢复所有包时,提升下载速度。 - 锁定版本号,防止自动升级新版本