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东西npm do-i-have-everything-i-need-installed命令,将退出1

它看起来像我已经find一种方式退出1 ,后/之前(我认为顺序没有关系)做普通的npm install我需要运行npm install my_module这将退出1 。 这意味着我可以在我的CI脚本中定义一个模块列表,以确保他们需要(在peerDependencies中定义的),而不是漂亮,但总比没有好。

所以npm install不会破坏,无论你在package.json定义什么样的依赖关系。 如果你的package.json有废话, npm install module_name将会中断。

你很可能使用npm @ 3(版本3)。

正如在文档中指定的,npm版本1和2在大多数情况下用于安装peerDependencies 。 Npm版本3改变了这种行为,不再安装peerDependencies而是在没有安装peerDependencies时发出警告。

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

更改背后的原因主要是为了避免使用peerDependencies时的依赖性,或者大部分时间peerDependencies被错误地使用。 在npm Github上有很多关于peerDependencies的问题,像这样解释了一些问题,导致解决scheme不再安装peerDependencies

如果你的应用程序崩溃,如果没有安装request ,你大多需要它。 目前,在npm环境中, dependencies是你require()require()devDependencies是只有开发,testing等require()require()

peerDependencies最初的目的是为了解决软件包的问题,​​这些软件包通常是针对其他框架或库的“插件” ,即使不直接使用或需要“主机”软件包,也可以与另一个“主机”软件包一起使用。

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

peerDependencies是一种说明一个软件包在插入“主机”软件包版本时工作的方式,所以如果你安装了这个软件包, 也应该手动安装这个软件包。

这就是你现在的行为,你正在安装你的应用程序,列出request作为peerDependencies ,所以你应该安装它的工作,并删除警告,否则,你需要移动到经典的dependencies