随着npm@5发布,除非已经存在npm-shrinkwrap.json
,否则它将会写入一个package-lock.json
。
我通过以下方式全局安装了npm@5:
npm install npm@5 -g
现在,在以下情况下,如果找到 npm-shrinkwrap.json
:
npm install
会打印出一个警告:
npm WARN read-shrinkwrap This version of npm
is compatible with lockfileVersion@1,
but npm-shrinkwrap.json was generated for lockfileVersion@0.
I'll try to do my best with it!
我的结论是,我应该将shrinkwrap替换为package-lock.json
。
但是,为什么会有一个新的格式呢?package-lock.json
相对于npm-shrinkwrap.json
有哪些优势呢?
package-lock.json
,然后如果你将该库安装为其他包的依赖项,NPM 将忽略该库的package-lock.json
。但是,如果一个库发布了npm-shrinkwrap.json
,并且你将该库安装为一个依赖项,那么你还将作为次要依赖项安装库中npm-shrinkwrap.json
中指定的所有依赖项的确切版本。 - Mark Amerynpm ci
来确保package-lock.json
只读安装。(npm install
会改变package-lock.json
,可能会引起混乱和潜在的错误,并且不能充分利用package-lock.json
本身。) - k0pernikusnpm ci
如何处理npm-shrinkwrap.json
和package-lock.json
没有任何区别 - 这与这个问题关于这两个文件的区别有什么关系呢?此外,阅读了一些资料后:我认为自从 npm 5.4 版本以来,"npm install
... 不会利用package-lock.json
" 的说法是错误的 - 我相信npm install
现在会尊重你的package-lock
,除非它与你的package.json
明显不兼容,在这种情况下,以后者为准。(但我已经离开 JavaScript 领域有一段时间了 - 我错过了什么吗?) - Mark Amery