【问题标题】:How do I fix the npm UNMET PEER DEPENDENCY warning?如何修复 npm UNMET PEER DEPENDENCY 警告?
【发布时间】:2016-06-14 18:46:12
【问题描述】:

我在 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,你可能不需要回滚版本。最好测试一下您是否真的在使用新版本时遇到问题。

标签: angularjs node.js npm npm-install angularjs-material


【解决方案1】:

npm 不再安装对等依赖项,因此您需要手动安装它们,只需在所需的 deps 上执行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

【讨论】:

  • 有没有办法找到 angular-material 的 deps 以便我可以安装?
  • 你需要将这些新的依赖添加到你的package.json吗?
  • @caffinatedmonkey 这将是理想的
  • @caffinatedmonkey 如果你指定了--save 开关,npm 将为你更新你的 package.json(或者 --save-dev 如果包是一个开发依赖)
  • 不是让 npm 为您管理所有这些依赖项的全部意义吗?如果我进行 npm 安装,然后得到一堆未满足的依赖项列表,我必须手动手动添加到我的 composer.json 文件中,那时我什至从 npm 获得什么价值?
【解决方案2】:

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

然后运行

rm -rf node_modules/
npm cache clean
npm install

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

【讨论】:

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

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

npm install -g npm

【讨论】:

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

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”
  • 这个包只安装当前包的直接peer deps,不处理包deps的peer deps(子代的peers)。
【解决方案5】:

编辑 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.x.x 版本。 (explanation of ^)

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

例如,转到发布页面

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

packageB v4.0.0-beta.0

BREAKING CHANGE
package: requires packageA >= v4.0.0

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

此时,您有两个选择。

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

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

如果您选择选项 2:
如果 pakageA 从版本 3 升级到 4 很简单,或者如果 pakageB 的维护者还没有测试 pakageA 的版本 4 但说应该没问题,您可以考虑留下错误。

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

最后,如果你想知道为什么你必须手动做这样的事情,this link explains well.

【讨论】:

    【解决方案6】:

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

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

    【讨论】:

      【解决方案7】:

      给定的答案不会总是有效。如果它不能解决您的问题。确保您还在 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 库从使用 "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@&lt;2.6 的对等体和另一个 (library-two) package@&gt;2.7 的对等体?那么我最终将不得不在我的代码库中处理两个版本的package 吗?我怎么知道当我使用library-one 时,我必须将它与package@2.5.9 一起使用,而当我使用library-two 时,我必须将它与package@2.7.1 一起使用?
      • @tonix 试试看。导入一个旧包和一个共享包的新包。 npm 神奇地处理它。如果可以的话,它会尝试并为他们两个使用正确的版本,但它也可以通过 npm magic 同时使用两者
      • 你的意思是 NPM 的这个特性是在 ES6 import 级别工作的吗?
      • 我的意思是我真的不知道它是如何工作的,但它并不难测试,所以只需测试它,看看它的作用。
      【解决方案8】:

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

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

      这对我来说是什么.. 1 小时的返工与 6 小时的试图找出 wtf 是错误的.. 希望我以这种方式开始..

      【讨论】:

      • OP 正在使用 AngularJS
      【解决方案9】:

      今天可用 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
      【解决方案10】:

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

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

      npm install -g npm@7
      

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

      【讨论】:

        【解决方案11】:

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

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

        npm audit
        

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

        npm audit fix
        

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

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

        npm upgrade
        

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

        npm list
        

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

        【讨论】:

          【解决方案12】:

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

          【讨论】:

            【解决方案13】:

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

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

            一一安装。 它对我有用。

            【讨论】:

            • 这真的是最好的解决方案吗?全局安装以忽略项目依赖项的实际“问题”?
            • 这将在您的机器上全局安装依赖项。您的同行将无法在共享环境中解决此问题。
            猜你喜欢
            • 1970-01-01
            • 2016-09-18
            • 1970-01-01
            • 2020-06-15
            • 2018-06-13
            • 2017-04-22
            • 2017-01-05
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多