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

标签 npm npm-shrinkwrap package-lock.json

release of npm@5 ,它现在将写入一个 package-lock.json 除非 npm-shrinkwrap.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!

所以我的结论是我应该用package-lock.json替换shrinkwrap。

但是为什么要有新的格式呢? package-lock.json 能做什么而 npm-shrinkwrap.json 不能?

最佳答案

这些文件具有完全相同的内容,但 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.jsonnpm-shrinkwrap.json通过运行npm shrinkwrap .

因此:

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

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

    1. 使用 package-lock.json准确记录您安装的依赖项版本,但允许安装您的软件包的人使用与您的 package.json 指定的版本范围兼容的任何版本的依赖项,或
    2. 使用 npm-shrinkwrap.json确保安装您的软件包的每个人都获得完全相同所有依赖项的相同版本


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

关于npm - npm-shrinkwrap.json 和 package-lock.json 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44258235/

相关文章:

firebase - 获取类型错误 : Cannot convert object to primitive value when running firebase emulators:start

node.js - 如何使用 `yarn` 覆盖嵌套依赖项?

node.js - package-lock.json 中的 "requires: true"有什么作用

node.js - npm install 更改从 URL 解析为 false

node.js - npm 5 忽略包锁

node.js - 找不到 NPM -bash 命令

node.js - yarn.lock 和 npm 的 shrinkwrap 有什么区别?

node.js - Vagrant、Puppet 和 nodejs 模块 : throwing error on npm module installation

node.js - 如何防止可传递的开发依赖被收缩包装

node.js - npm 递归更新包