@
lisongeee 首先 dedupe 是有限制的,如果两个库非得一个写 1.2.*,一个写 1.3.*,你最后还是会有两个版本。
然后保底方案,使用 package-lock.json 里的版本的话,所有 dependency 都会是 nested 。有些库就是不能版本冲突,再举一个浅显的例子,不同的库不应该引用不同版本的 react 对吧,应该把这种东西放到 peerDependencies 这种基础知识大家都知道,但是我遇到过很多别的库,就要把公司的 common 包放在 dependencie 里,你能咋办。
再加上之前说的 npm ,2021 年 12 月才搞出来 override 这么基础的功能。让本来已经很糟糕的 node 体验变得更糟糕了。如果你说 yarn ,我的火气还没这么大。
范式匹配也是最大的败笔之一,很多项目,总有人喜欢用 latest ,当你引用别的组写的这样的包的时候,latest 的 dependency 很多时候都不太 work ,比如你的 dependency 的 dependency 突然飙了一句 node18 的语法,打包的时候没有打好,导致你 node14 的项目 fail 了,老板让你这周内 fix ,当你咬咬牙升级 18 的时候,更多的库 fail 了,true story 。
我在写 Java 的时候从来没遇到过这些 bullshit ,你说的 class not found 只会出现在刚引进新包的时候。你永远不会像 node 一样,昨天用着好好的,今天就不能 build 了。