意外的NPM PeerDependency错误

时间:2016-04-26 18:32:19

标签: reactjs npm semantic-versioning

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

我正在一个具有大量依赖项的项目中将React从版本0.13.3升级到0.14.8。当我运行'npm install'时,我希望为指定React@0.14.8不满足的版本兼容性的软件包获取peerDependency错误。

...相反,即使v0.14.8满足peerDependency semver规范,我也会因为将React列为peerDependency的依赖关系而得到错误: The cli error.

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

enter image description here

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

此外,即使我手动修改其中一个问题包的React peerDependency规范以“想要”我正在给它的版本(v0.14.8),npm仍然会为该包抛出peerDependency错误:

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

enter image description here

...导致: enter image description here

笏?

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

...另外,如果它提供了更多的见解,这里是package.json文件: enter image description here

编辑2: 虽然它肯定没有解决任何问题,但是通过从包的错误中删除package.json中的反应peerDependency规范可以使个别错误失效,如下所示: enter image description here

...在执行此操作之后,但是,尽管看起来它们应该起作用的反应性peerDependency规范仍然存在错误,但是错误的包。

1 个答案:

答案 0 :(得分:0)

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

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

然后你得到Peer Dependencies。这些特别之处在于安装新副本不会起作用。这个想法是"反应颜色选择器"或任何其他对等方需要与已安装的确切版本进行交互。如果"反应颜色选择"想要0.14.x和" react-waypoint"想要0.13.x,没有办法满足他们两个,所以npm只是放弃了。这就是这里发生的事情。

您可能会查看所有React依赖项以找出奇怪的依赖项。错误消息可能更好。首先检查' react-waypoint'和'反应颜色选择器'如果您有合法的冲突,意味着两个包试图插入不同的,不兼容的版本,您需要弄清楚并更改一些JavaScript代码。它不仅仅是package.json簿记。