2013-04-04 159 views
146

我想使用grunt-contrib-jasmine NPM软件包。它有各种依赖。依赖图的部分看起来像这样:如何覆盖嵌套的NPM依赖项版本?

─┬ [email protected] 
│ ├─┬ [email protected] 
│ │ ├─┬ [email protected] 

遗憾的是,在这个版本phantomjs它禁止在Mac OS X上安装正确这是在最新版中的错误。

我怎样才能得到grunt-lib-phantomjs使用较新版本的phantomjs

一些额外的背景:

+0

只需'git clone'或fork需要的模块。您也可以手动删除嵌套的'phantomjs'。 – elmigranto 2013-04-04 12:16:43

+0

['grunt-contrib-jasmine'](https://npmjs.org/package/grunt-contrib-jasmine)在0.5.1上,它使用'grunt-lib-phantomjs @ 0.3.1',它使用' phantomjs @ 1.9.1-0' :) – gustavohenke 2013-07-02 11:40:24

回答

167

您可能已经找到了解决方法。

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

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

{ 
    "dependencies": { 
    "grunt-contrib-connect": { 
     "version": "0.3.0", 
     "from": "[email protected]", 
     "dependencies": { 
     "connect": { 
      "version": "2.8.1", 
      "from": "[email protected]~2.7.3" 
     } 
     } 
    } 
    } 
} 

npm应该在为项目安装时自动提取它。

(参见:​​)

+2

谢谢!这正是我一直在寻找的东西。 – georgebrock 2013-07-02 11:40:32

+0

不错,简单!但是你并不真的需要'从'。为什么要添加它? – Domi 2015-03-17 05:24:25

+6

当我这样做时,只安装了'grunt-contrib-connect'依赖项及其子项。我的所有其他依赖package.json没有安装。 – iDVB 2015-04-23 00:40:55

4

对于那些从2018年以后,使用NPM 5.0或以上版本:编辑您package-lock.json:从"requires"节中删除库,并在“依赖性”添加它。

例如,您希望deglob程序包使用glob程序包版本3.2.11而不是当前的程序包。你打开package-lock.json看看:

"deglob": { 
    "version": "2.1.0", 
    "resolved": "https://registry.npmjs.org/deglob/-/deglob-2.1.0.tgz", 
    "integrity": "sha1-TUSr4W7zLHebSXK9FBqAMlApoUo=", 
    "requires": { 
    "find-root": "1.1.0", 
    "glob": "7.1.2", 
    "ignore": "3.3.5", 
    "pkg-config": "1.1.1", 
    "run-parallel": "1.1.6", 
    "uniq": "1.0.1" 
    } 
}, 

"requires"删除"glob": "7.1.2",,用正确的版本添加"dependencies"

"deglob": { 
    "version": "2.1.0", 
    "resolved": "https://registry.npmjs.org/deglob/-/deglob-2.1.0.tgz", 
    "integrity": "sha1-TUSr4W7zLHebSXK9FBqAMlApoUo=", 
    "requires": { 
    "find-root": "1.1.0", 
    "ignore": "3.3.5", 
    "pkg-config": "1.1.1", 
    "run-parallel": "1.1.6", 
    "uniq": "1.0.1" 
    }, 
    "dependencies": { 
    "glob": { 
     "version": "3.2.11" 
    } 
    } 
}, 

现在删除您node_modules文件夹,运行npm install它会丢失部分添加到"dependencies"部分。

+0

这很好,只要'npm install'运行一次。在我的情况下,编辑是必要的,因为嵌套dep导致失败。 – ppasler 2018-03-01 09:09:40

+0

当你运行'npm i'而不是编辑你的package-lock.json并在那里添加子依赖到“dependencies”时,这个将会被删除,把你的package.json的“dependencies”部分添加到子依赖 – trickpatty 2018-03-01 16:18:19

相关问题