为什么 npm 已经使用扁平化结构了依然会存在重复的安装包

环境
node: 14.15.0
npm: 6.14.8

问题现象
通过npm ls查看项目的依赖结构时,发现重复安装了很多个相同版本的core-js@2.6.12

  1. 尝试使用npm dedupe删除重复的依赖无效果。
  2. 尝试删除 package-lock.json 与 node_modules 文件,重复安装无效果

按照 npm 官方的说法,npm 会对依赖进行扁平化的处理,以减少重复的依赖安装。理论上我这里的core-js肯定是重复的,但是依然安装了多个。如下图
image.png

为什么会出现这种情况呢?

阅读 5.4k
3 个回答

经过不断的尝试和查看找到了答案。
项目中存在一个依赖 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中重复安装了(纵使他们一摸一样)。

不是一个版本的core-js吧

因为那个包本身就包含node_modules,可以给包作者提下issues,发布包的时候,package.json设置下files字段

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进