繁体   English   中英

npm 对等依赖检查

[英]npm peer dependency check

$ 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

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

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

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

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

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

peerDependencies最初旨在解决主要是其他框架或库的“插件”包的问题,​​旨在与另一个“主机”包一起使用,即使它们不直接使用或需要“主机”包。

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

peerDependencies是一种说法,当插入一个“主机”包的版本时,一个包可以工作,所以如果你安装了这个包,也应该手动安装另一个包。

这就是您当前的行为,您正在安装您的应用程序,将request列为peerDependencies ,因此您应该安装它以使其工作并删除警告,否则,您需要移动到经典的dependencies

看起来我已经找到了一种以1退出的方法,在执行一般npm install之后/之前(我认为顺序无关紧要)我需要运行npm install my_module ,它将以1退出。 这意味着我可以定义一个模块列表,我想确保在我的 CI 脚本中有他们需要的东西(在peerDependencies中定义),虽然不漂亮但总比没有好。

因此,无论您将在package.json定义什么样的依赖关系, npm install都不会中断。 如果package.json有废话, npm install module_name会中断。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM