意外的 NPM PeerDependency 错误
Posted
技术标签:
【中文标题】意外的 NPM PeerDependency 错误【英文标题】:Unexpected NPM PeerDependency Error 【发布时间】:2016-08-20 18:16:18 【问题描述】:仅供参考:我对 npm 语义版本控制的理解来自 the npm docs 和 this 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,其他包仍然会抛出相同的错误。 (在原始问题中没有提到这一点,现在对其进行编辑以反映这一点。) 【参考方案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 簿记。
【讨论】:
以上是关于意外的 NPM PeerDependency 错误的主要内容,如果未能解决你的问题,请参考以下文章
创建反应应用程序:npm 错误!在“....”附近解析时 JSON 输入意外结束
通过 npm 安装 firebase 时遇到错误 |在 [关闭] 附近解析时 JSON 输入意外结束
React Setup 'npm run build' 错误“在 18:4 出现意外的令牌 'b'”
无法安装 Angular cli npm -ERR!代码 Z_BUF_ERROR npm ERR! errno -5 npm 错误! zlib:文件意外结束