npm对等依赖检查

时间:2016-08-18 21:00:04

标签: javascript node.js npm

$ npm install
my_module@0.0.1 /Users/antpaw/my_module
├── my_module@0.0.1 
└── UNMET PEER DEPENDENCY request@^2.74.0

npm WARN my_module@0.0.1 requires a peer of request@^2.74.0 but none was installed.

我不明白这只是一个警告。如果"请求"这对我的应用来说是一个非常重要的交易。没有安装,我的应用程序将崩溃。

如果对等依赖关系未得到满足,或者npm install命令会以1退出,我如何使npm do-i-have-everything-i-need-installed退出1

3 个答案:

答案 0 :(得分:3)

您最有可能使用npm @ 3(版本3)。

如文档中所述,在大多数情况下,npm版本1和2用于安装peerDependencies。 Npm版本3更改了此行为,不再安装peerDependencies,而是在未安装peerDependencies时发出警告。

  

npm版本1和2将自动安装peerDependencies,如果它们未在依赖关系树中显式依赖于更高版本。在下一个主要版本的npm(npm @ 3)中,将不再是这种情况。您将收到一条警告,指出未安装peerDependency。

这些变化背后的原因主要是为了避免在使用peerDependencies或大部分时间peerDependencies被错误使用时依赖地狱。关于peerDependencies npm Github this one解决了一些问题以及导致解决方案不再安装peerDependencies的问题,Angularjs上存在许多问题。

如果您的应用程序在未安装request的情况下崩溃,则您通常需要它。目前,在npm环境中,dependencies是您require()的包,devDependencies是您require()仅用于开发,测试等的包。

peerDependencies最初设计用于解决其他框架或库主要用于'plugins'的软件包的问题,​​这些软件包旨在与其他“主机”软件包一起使用,即使它们是不直接使用或要求'主机'包。

例如,Grunt插件旨在与Grunt一起使用,但从不require('grunt');。将grunt添加为dependencies会导致新的下载副本永远不会被使用。即使某些插件与'host'包具有直接依赖关系并在dependencies中指定'host'包,也会导致'host'包的多个副本。

peerDependencies是一种说法,当插入“主机”软件包版本时,软件包可以正常运行,因此如果您安装此软件包,也应安装此其他软件包包手动

这是您目前的行为,您正在安装自己的应用程序,将request列为peerDependencies,因此您应安装它以使其正常工作并删除警告,否则,你需要转向经典的dependencies

答案 1 :(得分:3)

看起来我已经找到了一种方法退出1,之后/之前(我觉得顺序并不重要)做一般npm install我需要运行npm install my_module将以1退出。这意味着我可以定义一个模块列表,我希望确保在我的CI脚本中确切地拥有它们所需的内容(在peerDependencies中定义),不是很好,但它总比没有好。

因此,npm install无论您在package.json中定义哪种依赖性无意义,都不会中断。{1}}。如果您在npm install module_name中有废话,package.json将会中断。

答案 2 :(得分:0)

有一个工具可以让我检查兼容的依赖版本。 签出https://www.npmpeer.dev/