【问题标题】:Unexpected NPM PeerDependency Error意外的 NPM PeerDependency 错误
【发布时间】:2016-08-20 18:16:18
【问题描述】:

仅供参考:我对 npm 语义版本控制的理解来自 the npm docsthis article

我在一个有很多依赖项的项目中将 React 从 0.13.3 版本升级到 0.14.8。当我运行 'npm install' 时,我希望指定 React@0.14.8 不满足的版本兼容性的包会出现 peerDependency 错误。

...相反,我收到将 React 列为 peerDependency 的每个依赖项的错误,即使 v0.14.8 满足 peerDependency semver 规范:

检查第一个包抛出的错误:react-color-picker 2.1.9 想要一个大于或等于 0.12.0 的 React 版本。这是在 react-color-picker 的 package.json 中指定的:

...但是 0.14.8 确实大于 0.12.0。那么为什么会抛出这个错误呢?

此外,即使我手动修改这些问题包的 React peerDependency 规范之一以“想要”我提供的版本(v0.14.8),npm 仍然会为该包引发 peerDependency 错误:

将 'react-color-picker' package.json peerDependency 规范更改为:

...结果:

什么?

编辑 1: 这个问题并没有阻碍项目。手动将导致错误的软件包升级到最新版本实际上消除了错误。但是我想知道如果 peerDependency 规范没有任何明显的问题,为什么 npm 首先会抛出这些错误。

...此外,如果它提供更多洞察力,这里是 package.json 文件:

编辑 2: 虽然它肯定不能解决任何问题,但可以通过从错误包的 package.json 中删除 react peerDependency 规范来消除个别错误,如下所示:

...然而,在这样做之后,尽管响应 peerDependency 规范看起来应该可以工作,但仍然出错的包仍然出错。

【问题讨论】:

  • 您可以尝试最新版本的 nodejs 和 npm。它看起来像一个错误。否则,更新 React 后,您是否尝试过一次重新安装所有模块?可以分享一下 package.json 的配置吗?
  • 重新node和npm:项目到了升级node和npm都不是小菜一碟的地步,所以想看看有没有别的选择。 React 升级后立即重新安装:尝试过; npm 仍然会抛出相同的错误。
  • 这可能是全局安装和本地安装的版本不同。检查您在全局和本地安装的版本,然后确保对等依赖项安装在同一 node_modules 目录中。
  • 在你的第一个屏幕截图中,react-waypoint 似乎想要使用 react@0.13.x,如果你使用的是 0.14.8,这将是一个问题。 react-dnd 和 react-select 也一样。
  • @KCaradonna:检查了全局和本地版本,所有版本都符合预期。 (即,这似乎不是问题。)如果我从他们的 package.json 中删除 React peerDependency 规范,则重新 react-waypoint、react-dnd 和 react-select,其他包仍然会抛出相同的错误。 (在原始问题中没有提到这一点,现在对其进行编辑以反映这一点。)

标签: reactjs npm semantic-versioning


【解决方案1】:

对等依赖是特殊的,所以如果我从重述基础开始,我很抱歉。

NPM 会问自己“我看到的依赖项是否已经满足?如果没有,让我在我能找到的目录树的最高级别安装一些版本。”当你的程序需要一个版本的“superfoo”,而你需要的“superbar”包需要另一个版本的“superfoo”时,npm 会在./node_packages 中安装一个版本,在./node_packages/superbar/node_packages 中安装另一个版本。 NPM 不会优化树以安装尽可能少的副本。如果您运行npm -la | more,您将了解安装了多少个软件包副本。

然后你会得到 Peer Dependencies。这些是特殊的,因为安装新副本不起作用。这个想法是“react-color-picker”或任何其他对等点需要与已安装的确切版本进行交互。如果“react-color-picker”想要 0.14.x 而“react-waypoint”想要 0.13.x,就没有办法同时满足它们,所以 npm 就放弃了。这就是这里发生的事情。

你可能会通过所有的 React 依赖项来查找奇怪的依赖项。错误消息可能会更好。首先检查“react-waypoint”和“react-color-picker”。如果你有一个合法的冲突,这意味着两个包试图插入不同的、不兼容的版本,你需要弄清楚并更改一些 JavaScript 代码。这不仅仅是 package.json 簿记。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-30
    • 2018-04-14
    • 2017-12-14
    • 1970-01-01
    相关资源
    最近更新 更多