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
复原所有包时,晋升下载速度。 - 锁定版本号,避免主动降级新版本