如何解决npm UNMET PEER DEPENDENCY警告?


223

我在Windows 10上,使用Node 5.6.0和npm 3.6.0。我正在尝试将angular-material和mdi安装到我的工作文件夹中。npm使用以下命令安装角度材料的mdi错误:

+-- angular@1.5.0

+-- UNMET PEER DEPENDENCY angular-animate@^1.5.0

+-- UNMET PEER DEPENDENCY angular-aria@^1.5.0

+-- angular-material@1.0.6

+-- UNMET PEER DEPENDENCY angular-messages@^1.5.0 `-- mdi@1.4.57

npm WARN enoent ENOENT: no such file or directory, open
'C:\Users\xxxxx\Desktop\ngClassifieds\package.json' 

npm WARN angular-material@1.0.6 requires a peer of
angular-animate@^1.5.0 but none was installed. 

npm WARN angular-material@1.0.6 requires a peer of angular-aria@^1.5.0
but none was installed. 

npm WARN angular-material@1.0.6 requires a peer of
angular-messages@^1.5.0 but none was installed.

如何解决此问题以安装AngularJS材质和MDI?


这些错误类型会产生任何问题吗?
blackawk

不适合Reza,所以要晚了,但是适合其他任何人……尝试以下操作:npm view angular-material peerDependencies
peter70'Sep

1
通常,您可能并不总是希望解决未满足的依赖性。例如,它某个软件包依赖于other-package@^1.5.0,并且您安装了other-package@2.0.0,则可能不需要回滚该版本。最好测试一下您是否确实在使用较新版本时遇到问题。
John Pankowicz

Answers:


203

npm不再安装对等项依赖项,因此您需要手动安装它们,只需npm install在所需的deps上执行一个,然后尝试再次安装主要的对等项。


回复评论:

这是正确的信息,它说明您缺少哪些部门

UNMET PEER DEPENDENCY angular-animate@^1.5.0 +-- 
UNMET PEER DEPENDENCY angular-aria@^1.5.0 +-- angular-material@1.0.6 +
UNMET PEER DEPENDENCY angular-messages@^1.5.0 `-- mdi@1.4.57` 

所以你需要 npm install angular angular-animate angular-aria angular-material angular-messages mdi


有没有办法找到角材部门,以便我安装?
Reza

2
您是否需要向您添加这些新的依赖项package.json
0xcaff

2
@caffinatedmonkey会很理想
Datsik '16

9
@caffinatedmonkey,如果您指定--save开关npm将为您更新package.json(或者--save-dev如果软件包是开发依赖项)
McGuireV10 '16

33
npm的全部要点不是要它为您管理所有这些依赖项吗?如果我进行npm安装,那么会得到一堆未满足的依赖关系列表,我必须手动将它们手动添加到composer.json文件中,那时候我甚至从npm中得到什么价值?
chiliNUT

66

UNMET PEER DEPENDENCYpackage.json不满足文件中指定的一个或多个模块的依赖性时,将引发错误。仔细检查警告,并package.json使用正确版本的依赖项更新文件。

然后跑

rm -rf node_modules/
npm cache clean
npm install

这将正确安装所有必需的依赖项。


3
什么是对等依赖性
aWebDeveloper

当您安装软件包时,它可能又取决于其他软件包的特定版本。如果您没有提供正确的依赖版本的软件包,那么将无法满足“对等依赖”。因此,您需要更新依赖软件包的预期版本以解决该问题。
JayKrish

4
那对我没用。我仍然收到有关需要同行的警告。
亚当·泽纳

1
比公认的解决方案干净得多!这一组代码处理op问题的所有可能情况,而不是它们所遇到的特定问题。
HoldOffHunger

使用npm cache clean命令会产生错误:从npm @ 5开始,npm缓存会因损坏问题而自我修复,并且保证从缓存中提取的数据是有效的。如果要确保所有内容都一致,请改用“ npm cache verify”。npm ERR!如果确定要删除整个缓存,请使用--force重新运行此命令。
CodeMonkey

30

就我而言,所有依赖项已经存在。在这种情况下,请更新NPM,因为它可能已崩溃。它解决了我的问题。

npm install -g npm

为我工作。UNMET PEER DEPENDENCY typescript尝试安装时出现错误tslint。更新npm后,必须先安装打字稿,然后再安装tslint。
拉维玛利亚

由于某种原因,我不得不多次运行它,直到更新了其所有依赖项。
编码器

这对我来说破坏了npm,并导致了很多错误。
杰克

14

npm-install-peers为我工作。

npm install -g npm-install-peers

1
不适用于我:“此程序包似乎没有任何peerDependencies”。但是,我有几条消息,例如“缺少npm ERR!对等dep:@ angular / common @ ^ 5.0.0 || ^ 6.0.0,@ agm / core @ 1.0.0-beta.3必需”
Almir Campos

2
该程序包仅安装当前程序包的直接对等部门,而未处理该程序包的部门(子级对等)的对等部门。
Alex Skrypnyk,

7

导致此错误的最可能原因之一是您在package.json中定义了较旧的版本。要解决此问题,请更改package.json中的版本以匹配npm抱怨的版本。

完成后,运行npm install并瞧瞧!!


6

此答案并不适用于所有情况,但如果您仅通过键入不能解决错误npm install ,则此步骤可能会有所帮助。

假设您遇到此错误。

UNMET PEER DEPENDENCY packageA@4.2.0

npm WARN packageB@3.3.0 requires a peer of packageA@^3.1.0 but none was installed.

这意味着您安装了packageA的4.2.0版本,但是packageB@3.3.0需要pakageA的版本3.xx。(^的解释

因此,您可以通过将packageA降级为3.xx来解决此错误,但是通常您不想降级该软件包。
好消息是,在某些情况下,packageB只是跟不上packageA,而packageB的维护者正在努力将packageA的对等依赖性提高到4.xx。
在这种情况下,您可以检查是否有更高版本的packageB需要在npm或github中使用packageA的4.2.0版本。

例如,转到发布页面在此处输入图片说明

通常,您会发现关于这种依赖性的重大变化。

packageB v4.0.0-beta.0

BREAKING CHANGE
package: requires packageA >= v4.0.0

如果您在发布页面上找不到任何内容,请转到发布页面并按关键字搜索问题,例如peer。您可能会找到有用的信息。

在此处输入图片说明

此时,您有两个选择。

1)升级到您想要的版本
2)暂时保留错误,请等待稳定版本发布。

如果选择option1:
在许多情况下,版本没有latest 标签,因此不稳定。因此,您必须检查此更新中发生了什么更改,并确保所有内容都不会中断。

如果您选择选项2:
如果将pakageA从版本3升级到4是微不足道的,或者如果pakageB的维护者尚未测试pakageA的版本4,但表示应该没问题,则可以考虑保留该错误。

在这两种情况下,最好彻底测试它是否不会破坏任何东西。

最后,如果您想知道为什么必须手动执行操作,则此链接可以很好地说明。


3

好的,所以我努力了很长时间试图解决这个问题。这是选项,适用于您用尽其他所有方式后。

完成后,它仍然有效,将您的实际代码导入到这个新项目中。修正新的角度原因导致的编译错误。

多数民众赞成为我做的.. 1个小时的返工vs 6个小时的尝试找出wtf是错误的..希望我以此方式开始。


OP正在使用AngularJS
Edric

3

给定的答案将永远不会奏效。如果它不能解决您的问题。确保您还使用了正确的符号package.json。这对于解决头痛非常重要。例如:

warning " > @angular/compiler-cli@5.2.7" has incorrect peer dependency "typescript@>=2.4.2 <2.7".
warning " > tsickle@0.25.6" has incorrect peer dependency "typescript@>=2.4.2 <2.6".

所以我的打字稿需要在2.4.2和2.6之间吗?

所以我将我的打字稿库从使用更改"typescript": "^2.7"为使用"typescript": "^2.5"。看起来正确吗?

错误。

^意味着您可以使用"typescript": "2.5""2.6"或其他方式使用npm "2.7"...

如果你想学什么^~它平均看:什么是符号(〜)和尖之间的(^)中的package.json有什么区别?

另外,您还必须确保该软件包存在。也许没有"typescript": "2.5.9"查找包裹号。为真正安全起见,请删除~或,^如果您不想阅读它们的含义。


谢谢您的解释。如果我使用两个库,其中第一(例如,会发生什么library-one)的用途,例如的对等package@<2.6,而其他(library-two)一个同行package@>2.7?那么我最终将不得不处理package我的代码库中的两个版本吗?我怎么知道使用时library-one我必须package@2.5.9同时library-two使用它package@2.7.1
tonix

2

今天可用的Angular 2 rc.7,我在rxjs@5.0.0-beta.12UNMET PEER DEPENDENCY中也遇到了类似的问题。

如果您像我一样简单地替换@angular/...rc.6@angular/...rc.7-这还不够。因为,例如,@angular/router没有rc.6版本。

在这种情况下,最好在快速入门中查看package.json


OP正在使用AngularJS
Edric

-6

您可以通过全局安装UNMET依赖项来解决。

示例:npm install -g @ angular / common @ 4.4.6

逐一安装。它为我工作。


认为这真的是最好的解决方案吗?全局安装以忽略项目依赖项的实际“问题”?
qx3

1
这将在您的计算机上全局安装依赖项。您的同行将无法在共享环境中解决此问题。
AC Patrice
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.