如何覆盖嵌套的NPM依赖版本?

我想使用grunt-contrib-jasmine NPM软件包。 它有各种依赖。 部分依赖关系图如下所示:

 ─┬ grunt-contrib-jasmine@0.4.1 │ ├─┬ grunt-lib-phantomjs@0.2.0 │ │ ├─┬ phantomjs@1.8.2-2 

不幸的是,在这个版本的phantomjs有一个错误,它阻止了它在Mac OS X上的正确安装。这在最新版本中得到修复。

我怎样才能让grunt-lib-phantomjs使用更新版本的phantomjs

一些额外的背景:

  • grunt-contrib-jasmine明确要求版本"~0.2.0" grunt-lib-phantomjs "~0.2.0"grunt-lib-phantomjs ,它明确要求版本"~1.8.1" phantomjs "~1.8.1"phantomjs
  • 首先添加phantomjs到我的包的依赖关系没有任何影响; 两个版本都安装了, grunt-contrib-jasmine仍然使用旧版本(请参阅: 使用NPM安装包时,是否可以告诉它使用不同版本的依赖关系?

您可能已经find了解决办法。

无论如何,您可以使用npm shrinkwrapfunction,以覆盖任何依赖关系或子依赖关系。

我刚刚在一个我们的咕噜声中做了这个。 自2.7.3以来,我们需要更新的连接版本。 给我们造成了麻烦。 所以我创build了一个名为npm-shrinkwrap.json的文件:

 { "dependencies": { "grunt-contrib-connect": { "version": "0.3.0", "from": "grunt-contrib-connect@0.3.0", "dependencies": { "connect": { "version": "2.8.1", "from": "connect@~2.7.3" } } } } } 

在安装项目时,npm会自动提取。

(请参阅: https : //nodejs.org/en/blog/npm/managing-node-js-dependencies-with-shrinkwrap/ )