前段时间使用UMajs CLI
创建项目后,在安装依赖时居然报错了!!报错信息如下:
在这里我连续使用了“居然”和两个感叹号来表达我的惊诧之情:明明前段时间我帮人排查问题时还使用CLI
创建了项目,当时没这个问题。而且我检查了 CLI 工具和模板工程,在近期都没有发布更新。
于是我找了 UMajs 项目组其它成员(以下简称小伙伴)来帮助我重复同样的操作,都能够安装成功。果然事情并没有这么简单,这个结果让我不禁皱起了眉头,疲惫而又沧桑。
诧异归诧异,问题还是要解决的,看看报错信息吧。不逐行翻译了,报错信息大致如下:
项目的依赖@typescript-eslint/parser@^2.x
等包所需要的 eslint
版本是 eslint ^6
或者 eslint ^5
,而项目的依赖则是 eslint ^7
,这就导致依赖不一致所以 npm 会报错。
问题的真相往往就在血红的 ERR! 之中(如果你习惯性的忽略报错的话,当我没说):虽然明白了问题产生的根本原因,但为什么同样的项目别人没问题?
我想排查到这里,大家和我一样开始怀疑是环境问题,遂联系小伙伴执行 node -v
查看 node
版本号。让人意外的是,我俩的 node
版本居然都是 v14.16.1
。 emmmm,这也不奇怪,毕竟开发中你永远不知道意外的 bug 和需求变更哪个先到。
事情仿佛陷入了僵局。我现在有点想找老板蹭根烟。再降个版本试试,还不行就去蹭烟,我暗暗下了决心。
nvm use 12
之后再次尝试,问题居然解决了!我也失去了蹭烟的机会,隐约还有点小失落。
那么新问题又来了,为啥我本地 node v12
可以安装、node v14
不行,而小伙伴无论是 v12
还是 v14
都没有报错呢?
这个时候我突然注意到一个细节:
所以说 bug 往往隐藏在细节之中,居然是 npm
版本不一致导致的,至此真相大白了:npm
在 v7
版本新增了一个特性: proper-peerdependencies-support,会为我们自动安装 peer dependencies,而我上周恰好为了尝鲜 npm/tink
把 npm
升级到了 v8.1.0
🤔
虽然问题完全解决了,但我还是很惆怅:这可能就是(不够了解 peer dependencies 的)探索者所需要付出的代价吧。