ChatGPT解决这个技术问题 Extra ChatGPT

如何修复 npm UNMET PEER DEPENDENCY 警告?

我在 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.

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

这些类型的错误是否会产生任何问题?
不是为了 Reza,所以为时已晚,但对于其他任何人......试试这个:npm view angular-material peerDependencies
通常,您可能并不总是希望解决未满足的依赖关系。比如 some-package 对 other-package@^1.5.0 有依赖,而你安装了 other-package@2.0.0,你可能不需要回滚版本。最好测试一下您是否真的对较新版本有问题。

D
Datsik

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

回复评论:

就在那条消息中,它说明了您缺少哪些部门

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


您是否需要将这些新依赖项添加到您的 package.json
@caffinatedmonkey 那将是理想的
@caffinatedmonkey 如果您指定 --save 开关,npm 将为您更新您的 package.json(或 --save-dev 如果包是开发依赖项)
npm 的全部意义不是让它为你管理所有这些依赖项吗?如果我进行 npm 安装,然后得到一堆未满足的依赖项列表,我必须手动手动添加到我的 composer.json 文件中,那时我什至从 npm 获得什么价值?
从 Npm v7.0.0 开始,再次为您安装对等依赖项
A
Adnan Umer

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

然后运行

rm -rf node_modules/
npm cache clean
npm install

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


什么是对等依赖
当您安装一个包时,它可能又依赖于其他包的特定版本。如果您没有提供正确的依赖版本的包,那么“对等依赖”是不满足的。所以你需要更新依赖包的预期版本来解决这个问题。
那对我不起作用。我仍然收到有关需要同行的警告。
比公认的解决方案干净得多!这一组代码处理了操作问题的所有可能情况,而不是他们遇到的具体问题。
使用 npm cache clean 命令会报错:从 npm@5 开始,npm 缓存会从损坏问题中自我修复,并且保证从缓存中提取的数据是有效的。如果您想确保一切一致,请改用“npm cache verify”。 npm 错误!如果您确定要删除整个缓存,请使用 --force 重新运行此命令。
S
Sunil Garg

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

npm install -g npm

为我工作。我在尝试安装 tslint 时收到错误 UNMET PEER DEPENDENCY typescript。更新 npm 后,必须先安装 typscript,然后再安装 tslint。
出于某种原因,我不得不多次运行它,直到它更新了所有自己的依赖项。
这对我来说破坏了 npm 并导致了一堆错误。
Ω
ΩmegaMan

npm-install-peers 为我工作。

npm install -g npm-install-peers

对我不起作用:“这个包似乎没有任何 peerDependencies”。但是,我有几条消息,例如“npm ERR!peer dep missing: @angular/common@^5.0.0 || ^6.0.0, required by @agm/core@1.0.0-beta.3”
这个包只安装当前包的直接对等部门,并且不处理包的部门的对等部门(孩子的对等部门)。
o
ohkts11

编辑 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.

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

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

https://i.stack.imgur.com/Y8J5E.png

通常你会发现像这样的依赖关系的重大变化。

packageB v4.0.0-beta.0

BREAKING CHANGE
package: requires packageA >= v4.0.0

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

https://i.stack.imgur.com/W6eCE.png

此时,您有两个选择。

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

如果选择选项1:
很多情况下,版本没有latest tag,因此不稳定。因此,您必须检查此更新中发生了什么变化,并确保任何内容都不会中断。

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

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

最后,如果您想知道为什么必须手动执行此类操作,this link explains well.


T
Thomas Mwania

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

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


S
Samuel Thompson

给定的答案并不总是有效。如果它不能解决您的问题。确保您还在 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""2.7" 等来使用 npm...

如果您想了解 ^~ 的含义,请参阅:What's the difference between tilde(~) and caret(^) in 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 试试看。导入一个旧包和一个共享包的新包。 npm 神奇地处理它。如果可以的话,它会尝试并为他们两个使用正确的版本,但它也可以通过 npm 魔法同时使用两者
你的意思是 NPM 的这个特性在 ES6 import 级别上工作吗?
我的意思是我真的不知道它是如何工作的,但测试并不难,所以只需测试它,看看它做了什么。
u
user230910

好的,所以我挣扎了很长时间试图弄清楚这一点。这是核选项,因为当您用尽所有其他方式时..

在你的电脑上新建一个文件夹。

下载全新的 Angular 安装 - 我使用了本指南:https://coursetro.com/posts/code/55/How-to-Install-an-Angular-4-App

运行它,确保它有效

然后从您的 package.json 文件中一一安装您的依赖项

每一个都安装好后运行

完成后,它仍然可以工作,将您的实际代码导入这个新项目。修复新版本的 Angular 导致的任何编译错误。

这就是为我做的.. 1 小时的返工与 6 小时的试图找出 wtf 是错误的.. 希望我以这种方式开始..


OP 正在使用 AngularJS
k
ktretyak

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

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

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


OP 正在使用 AngularJS
D
Dale Ryan

尝试修复依赖项的安全漏洞问题时,也会出现此问题。

这是我所做的:审核安装的依赖项

npm audit

如果有可用的修复程序,运行以下命令将在大多数情况下修复问题:

npm audit fix

有些问题会出现 SEMVER WARNING,点击链接会提示我们如何进行人工审核和/或下一步该做什么。

做更多的研究让我发现了这个命令:

npm upgrade

似乎 npm audit fix 没有考虑更新对等依赖项,并且运行 npm upgrade 将修复未满足的对等依赖项。现在检查我们是否通过运行解决了问题:

npm list

这将为我们提供项目的所有依赖项,并警告我们任何未满足的对等部门错误。在大多数情况下,升级实际上比使用旧版本的软件包要好,如果您没有安全漏洞问题,npm install 也是一个可行的选择。


S
Sahan Amarsha

如果您使用的是 npm v6 或更早版本,您将收到此警告。在 npm v7.0 之后,npm 开发团队表示他们将自动安装对等依赖项,所有这些都在一起。因此,现在您不想手动安装对等依赖项。

您可以使用此命令安装 npm v7.0,

npm install -g npm@7

从 Github 博客发布的 this blog post 了解有关 npm v7.0 的更多信息。


f
faboulaws

如果您希望保留当前版本的 angular,您可以访问此 version compatibility checker 以检查哪个版本的 angular-material 最适合您当前的 angular 版本。您也可以check peer dependencies of angular-material using angular-material compatibility


S
Srinivas Jatoth

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

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

一个一个地安装。它对我有用。


想想,这真的是最好的解决方案吗?全局安装以忽略项目依赖项的实际“问题”?
这将在您的机器上全局安装依赖项。您的同行将无法在共享环境中解决此问题。