小编典典

npm-shrinkwrap.json 和 package-lock.json 有什么区别?

all

随着npm@5 的发布,它现在将写入 a package- lock.json,除非 anpm-shrinkwrap.json已经存在。

我通过以下方式全局安装了 npm@5:

npm install npm@5 -g

现在,如果npm-shrinkwrap.json在以下期间找到 a:

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!

所以我的结论是我应该用package-lock.json.

然而,为什么它有一种新的格式呢?能做什么不能package-lock.json做什么npm-shrinkwrap.json


阅读 102

收藏
2022-07-16

共1个答案

小编典典

这些文件具有完全相同的内容,但 npm 处理它们的方式存在一些差异,其中大部分在package-
lock.json
npm-
shrinkwrap.json 的文档页面上都有说明:

  • package-lock.json永远不会发布到 npm,而npm-shrinkwrap默认情况下是
  • package-lock.json不在顶级包中的文件被忽略,但属于依赖项的收缩包装文件被尊重
  • npm-shrinkwrap.json向后兼容 npm 版本 2、3 和 4,而package-lock.json仅被 npm 5+ 识别

您可以通过运行将现有转换package-lock.json为.npm-shrinkwrap.json``npm shrinkwrap

因此:

  • 如果您不将包发布到 npm,则在这两个文件之间进行选择几乎没有影响。您可能希望使用package-lock.json它,因为它是默认的,并且它的名称对 npm 初学者来说更清楚;npm-shrinkwrap.json或者,如果您难以确保开发团队中的每个人都使用 npm 5+ ,您可能希望使用与 npm 2-4 的向后兼容性。(请注意,npm 5 于 2017 年 5 月 25 日发布;从那个日期开始,向后兼容性将变得越来越不重要,因为大多数人最终都会升级。)

  • 如果您 包发布到 npm,您可以选择:

    1. 使用 apackage-lock.json准确记录您安装了哪些版本的依赖项,但允许安装您的包的​​人使用与您指定的版本范围兼容的任何版本的依赖项package.json,或者
    2. 使用 annpm-shrinkwrap.json来保证安装你的包的每个人都得到 完全相同 版本的所有依赖项

文档中描述的官方观点是选项 1 应该用于库(大概是为了减少当包的许多依赖项都依赖于相同辅助依赖项的略有不同版本时引起的包重复量),但是该选项2
对于将要全局安装的可执行文件可能是合理的。

2022-07-16