NPM锁定文件无法正确处理传递依赖项

时间:2017-08-29 07:09:47

标签: node.js npm dependencies node-modules package.json

在我当前的项目中,我们在babel-core: '6.5.2'文件中列出了具有确切版本(例如package.json的依赖项。

但是在最近的项目构建(包括在构建机器上运行npm install之后,一些节点模块被更新并且我们的工件被破坏了。

研究表明,尽管我们拥有package.json文件中提到的确切版本,但所需模块可能通过其依赖关系依赖于自身,并且它们都使用了插入符依赖关系。在我们的例子中它似乎是

  • babel-core: '6.5.2'取决于
  • babel-register: '^6.16.0'取决于
  • babel-core: '^6.9.0'已解析为babel-core: '6.26.0'(由于caret range rules

指定的babel-core版本会破坏我们的版本。

我们尝试创建package-lock.json个文件,以防止这些传递依赖项以 解析的方式解析。

但是,package-lock文件上的the documentation表示:

  

每当你运行npm install时,npm会生成或更新你的包锁

因此,所有依赖babel-core带插入符号版本的软件包都会使用不正确的模块版本解析。

仔细查看package-lock.json文件后,由于

,我认为不值得更改它
  1. 雪球效应 - 更改一个依赖项需要更改所有其他依赖项,具体取决于它(这是递归过程)

  2. 需要验证您即将更改为其哈希的版本(对于integrity字段)

  3. 问题是:如何安装我的package.json文件中提到的所有模块的确切版本,阻止NPM使用不同的版本再次解析它?

1 个答案:

答案 0 :(得分:0)

尝试使用npm shrinkwrap,它用于传递锁定。