npm 对等依赖意外失败

Posted

技术标签:

【中文标题】npm 对等依赖意外失败【英文标题】:npm peer-dependency failing unexpectedly 【发布时间】:2014-08-08 00:26:51 【问题描述】:

我正试图找出一个对等依赖问题,我觉得一切都很好......

我的package.json 有:

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

gulp-watchify/package.json 有:

"peerDependencies": 
    "watchify": "^0.6.1"
,

0.10.2 稳定^0.6.1,不是吗?那么为什么npm 抱怨:

npm ERR! peerinvalid The package watchify does not satisfy its siblings' peerDependencies requirements!
npm ERR! peerinvalid Peer gulp-watchify@0.2.0 wants watchify@^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

???

【问题讨论】:

【参考方案1】:

这里的原因是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

要解决此问题,您可以删除对 watchify 的依赖,或将其设置为 0.6.X 发布行中的某个内容,例如:

, "devDependencies" : 
    "gulp-watchify" : "^0.2.0"
    ,    "watchify" : "^0.6.4"

【讨论】:

gah,我讨厌人们决定多次对同一事物具有多种含义。谢谢你:) 是的,我想大多数人都不知道这一点(包括那些开发项目和使用 0.X 版本的人)。但是一旦你知道它,在早期开发中使用它就很好了。真的有稳定产品的人应该切换到1.X及以上。【参考方案2】:

我记得这是不久前版本不兼容的问题。这是一个具有类似依赖关系问题的堆栈,其答案应该有助于找出您的依赖关系在哪里中断。当然它是用于 grunt 依赖项:

grunt-dependencies

【讨论】:

以上是关于npm 对等依赖意外失败的主要内容,如果未能解决你的问题,请参考以下文章

意外的 NPM PeerDependency 错误

构建管道中的 NPM“解析附近时 JSON 输入意外结束”

React - 模块解析失败:意外的令牌

模块解析失败:意外字符“@”(1:0)

Rails 6 无法导入纱线依赖项:未捕获错误:模块解析失败:意外字符“#”(1:0)

ReactJS:意外令牌'<'