环境
node: 14.15.0
npm: 6.14.8
问题现象
通过npm ls
查看项目的依赖结构时,发现重复安装了很多个相同版本的core-js@2.6.12
。
- 尝试使用
npm dedupe
删除重复的依赖无效果。 - 尝试删除 package-lock.json 与 node_modules 文件,重复安装无效果
按照 npm 官方的说法,npm 会对依赖进行扁平化的处理,以减少重复的依赖安装。理论上我这里的core-js
肯定是重复的,但是依然安装了多个。如下图
为什么会出现这种情况呢?
经过不断的尝试和查看找到了答案。
项目中存在一个依赖 A,他有
core-js@3.x.x
和 B、C 三个子依赖。B、C 又依赖于
core-js@2.x.x
。由于 npm 的扁平化顺序由安装顺序决定,所以
core-js@3.x.x
被安装到了最外层。core-js@2.x.x
无法扁平化到最外层,只能在各自项目的node_modules
中重复安装了(纵使他们一摸一样)。