仅供参考:我对npm的语义版本控制的理解来自the npm docs和this article。
我正在一个具有大量依赖项的项目中将React从版本0.13.3升级到0.14.8。当我运行'npm install'时,我希望为指定React@0.14.8不满足的版本兼容性的软件包获取peerDependency错误。
...相反,即使v0.14.8满足peerDependency semver规范,我也会因为将React列为peerDependency的依赖关系而得到错误:
检查第一个包引发的错误:react-color-picker 2.1.9想要一个React版本大于或等于0.12.0。这在react-color-picker的package.json中指定:
......但0.14.8确实大于0.12.0。那么为什么会抛出这个错误呢?
此外,即使我手动修改其中一个问题包的React peerDependency规范以“想要”我正在给它的版本(v0.14.8),npm仍然会为该包抛出peerDependency错误:
将'react-color-picker'package.json peerDependency spec更改为:
笏?
编辑1: 这个问题并没有让项目得以恢复;手动升级导致错误到最新版本的软件包实际上消除了错误。但我想知道为什么如果peerDependency规范没有任何明显的问题,npm会首先抛出这些错误。
...另外,如果它提供了更多的见解,这里是package.json文件:
编辑2: 虽然它肯定没有解决任何问题,但是通过从包的错误中删除package.json中的反应peerDependency规范可以使个别错误失效,如下所示:
...在执行此操作之后,但是,尽管看起来它们应该起作用的反应性peerDependency规范仍然存在错误,但是错误的包。
答案 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簿记。