快速解决NPM报错:peerDependencies WARNING

【问题背景】
今天遇到一个问题:安装Webpack 3.x之后其它包提示peerDependencies WARNING,意思是包版本不兼容。

【难题】虽然NPM已经很自动化了,但依赖问题真的是一个难题,无法自动解决,需要人工干预调整。StackOverflow上的这篇问答也说了该问题无法自动处理。

【解决办法】去查各个版本的依赖关系,人工调整版本号。每个包的依赖关系都是放在package.json里面的,一个个版本去看当然很麻烦,这里介绍一个小技巧。

问题重现
例如我们现在安装了Webpack 3,package.json如下:

{
  "devDependencies": {
    "webpack": "^3.0.0",
  }
}

但是安装npm install --save-dev sass-loader的时候报错了,
错误比较明确说了sass-loader需要依赖新版的webpack,但是安装的webpack偏旧:

peerDependencies WARNING sass-loader@^8.0.0 requires a peer of webpack@^4.36.0 but webpack@3.12.0 was installed
解决步骤
现在我们需求明确要用Webpack 3,那只能让sass-loader降级了,问题是降到哪个版本呢?这里我们通过npm view命令来帮助我们寻找合适的版本。

首先敲npm view sass-loader versions,这会告诉我们sass-loader一共有哪些版本:

$ cnpm view sass-loader versions
[
  '0.0.1', '0.0.2', '0.1.0', '0.1.1',
  '0.2.0', '0.3.0', '0.3.1', '0.4.0-beta.1',
   ...
  '7.2.0', '7.3.0', '7.3.1', '8.0.0'
]

然后我们敲npm view sass-loader@8.0.0 peerDependencies,可以看到果然sass-loader 8.0.0依赖了webpack 4.36.0:

$ npm view sass-loader@8.0.0 peerDependencies
{
  webpack: '^4.36.0',
  'node-sass': '^4.0.0',
  sass: '^1.3.0',
  fibers: '>= 3.1.0'
}

为了找到能用的旧版,我们只能一个个版本检查,例如我们看看sass-loader 7.3.1能不能用:

$ cnpm view sass-loader@7.3.1 peerDependencies
{ webpack: '^3.0.0 || ^4.0.0' }

可以看到sass-loader 7.3.1是能兼容webpack 3.x的,那么我们就找到了,然后我们可以修改package.json,将兼容的版本填入:

{
  "devDependencies": {
    "sass-loader": "^7.3.1",
    "webpack": "^3.0.0"
  }
}

总结
当遇到版本依赖问题时,只能人工处理。

可以利用npm view [field]快速查看package.json的某个字段,也可以加上版本号使用npm view @version,如果不知道一共有哪些历史版本可以敲npm view versions。npm view的用法见官网文档。

人工寻找版本是不可避免的,为了提升效率可以:

结合二分法快速缩小范围
然后嫌国内网速慢可以用cnpm替代npm
版本号可以指定一个范围,例如:npm view bootstrap@^4.0.0

作者:chend0316
链接:https://www.jianshu.com/p/ca507ece4e73
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值