2014-06-17 58 views
2

我试图找出一个对等的依赖问题,一切都看起来不错,我...NPM同行依赖意外失败

package.json有:

, "devDependencies" : { 
    "gulp-watchify" : "^0.2.0" 
    , "watchify" : "^0.10.2" 
} 

而且gulp-watchify/package.json有:

"peerDependencies": { 
    "watchify": "^0.6.1" 
}, 

0.10.2 staisfies ^0.6.1,no?那么为什么npm抱怨:

npm ERR! peerinvalid The package watchify does not satisfy its siblings' peerDependencies requirements! 
npm ERR! peerinvalid Peer [email protected] wants [email protected]^0.6.1 

npm ERR! System Darwin 14.0.0 
npm ERR! command "/usr/local/bin/node" "/usr/local/bin/npm" "install" 
npm ERR! cwd <path redacted> 
npm ERR! node -v v0.11.12 
npm ERR! npm -v 1.4.3 
npm ERR! code EPEERINVALID 
npm ERR! 
npm ERR! Additional logging details can be found in: 
npm ERR!  <path redacted>/npm-debug.log 
npm ERR! not ok code 0 

???

回答

4

的这里的原因是0.10.2其实不满足^0.6.1,因为0.X.X版本是不稳定的版本的特殊semver类别。从0.1.X移至0.2.X表示突变,因此它们不兼容。来自semver docs

^0.1.3:=> = 0.1.3-0 < 0.2.0-0“与0.1.3兼容”。 0.x.x版本是特殊的:第一个非零组件表示可能发生中断更改,这意味着插入符号操作符与从指定版本开始的具有相同第一个非零组件的任何版本匹配。

为了解决这个问题,你可以删除在watchify你的依赖,或将其设置为沿0.6.X释放行的东西,如:

, "devDependencies" : { 
    "gulp-watchify" : "^0.2.0" 
    , "watchify" : "^0.6.4" 
} 
+0

嘎,我讨厌当人们决定有多重含义多次同样的事情。感谢:) –

+0

是的,我想大多数人不知道这个(包括开发项目和使用0.X版本的人)。但是一旦你了解它,它就会很好,在早期的开发中使用它。真正有稳定产品的人应该切换到1.X及以上。 – dylants

0

我记得这是版本不兼容的问题。这里有一个类似的依赖关系问题的堆栈,这个问题的答案应该有助于确定你的依赖关系在哪里破坏。就算它是咕噜的依赖关系:

grunt-dependencies