如何修复npm UNMET PEER DEPENDENCY警告?

Rez*_*eza 200 node.js npm angularjs npm-install angularjs-material

我在Windows 10上,使用Node 5.6.0和npm 3.6.0.我正在尝试将angular-material和mdi安装到我的工作文件夹中.npm install angular-material 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.
Run Code Online (Sandbox Code Playgroud)

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

Dat*_*sik 184

npm不再安装对等依赖项,因此您需要手动安装它们,只需npm install在所需的deps上执行,然后再尝试安装主要的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` 
Run Code Online (Sandbox Code Playgroud)

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

  • npm的全部要点不是要它为您管理所有这些依赖项吗?如果我进行npm安装,那么会得到一堆未满足的依赖项列表,我必须手动将它们手动添加到composer.json文件中,那时候我甚至从npm中得到什么价值? (10认同)
  • @caffinatedmonkey如果指定`--save`开关,npm将为你更新你的package.json(如果包是开发依赖项,则为`--save-dev`) (9认同)
  • 从 Npm v7.0.0 开始,再次为您安装对等依赖项 (4认同)
  • 你需要将这些新的依赖项添加到`package.json`中吗? (2认同)
  • @caffinatedmonkey,这将是理想的 (2认同)

小智 63

UNMET PEER DEPENDENCY如果package.json不满足文件中指定的一个或多个模块的依赖项,则抛出错误.仔细检查警告并package.json使用正确版本的依赖项更新文件.

然后跑

rm -rf node_modules/
npm cache clean
npm install
Run Code Online (Sandbox Code Playgroud)

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

  • 那对我没用。我仍然收到有关需要同行的警告。 (4认同)
  • 什么是对等依赖 (2认同)

小智 29

在我的情况下,所有的依赖关系已经存在.在那种情况下请更新NPM,因为它可能已经崩溃了.它解决了我的问题.

npm install -g npm
Run Code Online (Sandbox Code Playgroud)


ale*_*999 14

npm-install-peers为我工作.

npm install -g npm-install-peers
Run Code Online (Sandbox Code Playgroud)

  • 这个包只安装当前包的直接对等节点,不处理包的节点(子节点)的对等节点。 (2认同)

ohk*_*s11 12

编辑 2020

从 npm v7.0.0 开始,npm 会自动安装对等依赖项。这是升级到 v7 的原因之一。

https://github.blog/2020-10-13-presenting-v7-0-0-of-the-npm-cli/

此页面也很好地解释了对等依赖的基本原理。 https://github.com/npm/rfcs/blob/latest/implemented/0025-install-peer-deps.md


此答案并不适用于所有情况,但如果您无法通过简单地键入 来解决错误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.
Run Code Online (Sandbox Code Playgroud)

这意味着您安装了 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
Run Code Online (Sandbox Code Playgroud)

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

在此处输入图片说明

此时,您有两个选择。

  1. 升级到你想要的版本
  2. 暂时留下错误,等待稳定版本发布。

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

如果你选择选项2:
如果pakageA从版本3升级到4是微不足道的,或者如果pakageB的维护者还没有测试pakageA的版本4但说应该没有问题,你可以考虑留下这个错误。

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

最后,如果你想知道为什么你必须手动做这样的事情,这个链接解释得很好。


小智 6

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

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


Sam*_*son 6

给定的答案并不总是有效。如果它不能解决您的问题。确保您还在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".
Run Code Online (Sandbox Code Playgroud)

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

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

错误的。

^,你是好使用NPM手段"typescript": "2.5""2.6""2.7"等...

如果您想了解 the^~它的含义,请参阅:package.json 中的波浪号(~)和插入符(^)之间有什么区别?

您还必须确保该包存在。也许没有"typescript": "2.5.9"查找包号。为了真正安全~^如果您不想阅读它们的意思,只需删除或。