2014-06-17 56 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