快速解决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命令来帮助我们寻找合适的版本。

  1. 首先敲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'
]
  1. 然后我们敲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'
}
  1. 为了找到能用的旧版,我们只能一个个版本检查,例如我们看看sass-loader 7.3.1能不能用:
$ cnpm view sass-loader@7.3.1 peerDependencies
{ webpack: '^3.0.0 || ^4.0.0' }
  1. 可以看到sass-loader 7.3.1是能兼容webpack 3.x的,那么我们就找到了,然后我们可以修改package.json,将兼容的版本填入:
{
  "devDependencies": {
    "sass-loader": "^7.3.1",
    "webpack": "^3.0.0"
  }
}

总结

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

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

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

  • 结合二分法快速缩小范围
  • 然后嫌国内网速慢可以用cnpm替代npm
  • 版本号可以指定一个范围,例如:npm view bootstrap@^4.0.0
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,080评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,422评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,630评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,554评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,662评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,856评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,014评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,752评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,212评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,541评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,687评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,347评论 4 331
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,973评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,777评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,006评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,406评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,576评论 2 349

推荐阅读更多精彩内容

  • 非常感谢胖哥的博客和掘金小册的技术分享,希望大家去下面的链接去查看原文,他们写的非常好,都是多个项目经验的总结!!...
    示十阅读 2,253评论 0 2
  • 在现在的前端开发中,前后端分离、模块化开发、版本控制、文件合并与压缩、mock数据等等一些原本后端的思想开始...
    Charlot阅读 5,433评论 1 32
  • 全局安装webpack 全局安装webpack会有个问题,就是当你有两个项目依赖于不同版本的webpack,就会有...
    説好的妹紙呢阅读 1,807评论 0 11
  • 前端开发规范-react/react-router/redux/webpack/es6开发配置 项目地址: htt...
    燕京博士阅读 2,073评论 0 1
  • 不知道你有没有早恋过,但早恋的人一定知道那种幸福地感觉,比之后所有的幸福都来得踏实。 之前跟同学探讨过该不...
    女王英伦FAN阅读 205评论 0 0