本文针对: npm:6.9.0/node:v8.11.4
区别
是否publish
-
当你需要发布一个自己的package到
register
。- 如果你的package中包含
npm-shrinkwrap.json
,那么这个文件会随着包一起发布到register - 如果的package中包含
npm-lock.json
,那么这个文件一定不会随着一起发布到register
并且你可以通过
npm pack
指令查看你即将要发布的包中包含的内容。 - 如果你的package中包含
安装
- 如果你的project中同时存在
npm-lock.json and npm-shrinkwrap.json
, 那么install会完全忽视npm-lock.json
, 而完全根据npm-shrinkwrap.json
安装
生成
- 当你执行
npm install
会自动生成npm-lock.json
(npm 5+) -
npm-shrinkwrap.json
只会在执行npm shrinkwrap
才会被安装
内容
两种文件内容完全一致:
- version: 写明depedency的一个确定的版本
- resolved: 写明depedency的安装地址
- integrity: 根据包中的内容生成的hash值,它使用 Subresource Integrity 来验证已安装的软件包是否被改动过,换句话来说,验证包是否已失效。
这三个参数可以确定一个唯一的depedency
- require:除最外层的 requires 属性为 true 以外, 其他层的 requires 属性都对应着这个包的 package.json 里记录的自己的依赖项
- dependency: dependencies 层次结构与文件系统中 node_modules 的文件夹层次结构是完全对照的,这个字段可以理解成是node_module的快照
影响因素(lock和shrink相同)
- 因为
lock
文件一定是node_module
的快照,因此任何会updatenode_module
的行为,都会对lock
文件产生影响,比如npm install newPackage
,npm install oldPackage@newVersion
,npm update
,npm remove
。
summary:只要node_module发生变化必然会导致lock
文件发生变化
如何产生
-
package-lock.json
: 执行npm install
默认会产生一个这个文件 -
npm-shrinkwrap.json
: 执行npm shrink
会产生一个这个文件
假设:
-
目录中已经存在
package-lock.json
,此时再次执行npm shrink
:package-lock.json
文件消失,只留下npm-shrinkwrap.json
-
目录中已经存在
npm-shrinkwrap.json
,此时再次执行npm install
:没有办法再次产生
package-lock.json
网友评论