NPM 是尝试多次安装相同的依赖包还是只安装一次?

Does NPM try to install same dependent package multiple times or only once?

想了解 npm 如何处理相同版本的重复包的安装。

  1. 如果已经安装了相同的包 - 相同的版本,它会忽略吗?
  2. 又是install/overwrite同一个包裹吗?

例如:

  1. 包 A 依赖于包 B 和包 C。
  2. 其中包 B 和 C 依赖于通用包 D 版本 1.0

所以当 运行 npm install 时,它会尝试安装包 D 两次还是只安装一次,并且会忽略第二次出现,因为它已经存在于 node_modules?

NPM 安装算法声明 dependencies will be added as close to the top as is possible without breaking any other modules

在你的例子中,包 B 和 C 都依赖于 D@1.0。由于两个依赖之间没有可能的冲突,包D将在顶层安装一次。

粗略的表示,这里是你想象中的原始依赖树

+ package A
+-- B
   -- D@1.0
+-- C
   -- D@1.0

包 A 在同一顶层安装 dep B 和 dep C。由于树中没有其他冲突版本的 dep D,dep D 也被添加到顶层,供 dep B 和 dep C 使用。

+ package A
+-- B
+-- C
+-- D@1.0