NPM 如何处理与 Sub/Transitive 依赖项的冲突

How does NPM handle Conflicts with Sub/Transitive Dependencies

just discovered(对我自己而言)NPM 不像我过去使用的其他包管理系统那样工作。我对事物的基本理解是,我的每个依赖项也将有自己的 node_modules 文件夹和它自己的依赖项(并且,对于较新版本的 npm,第二个 node_modules 文件夹只会在以下情况下创建存在版本冲突)

这看起来很简洁,但我想知道 npm 如何处理 -- sub-sub? --依赖冲突。我很抱歉没有更好地掌握语言——但这就是我的意思。

我想将 @foo/bar 的 3.0 版安装到我的项目中。

第二个软件包——我们称之为 @second/package——我想安装 @foo/bar.

的 2.0 版

我现在明白了 NPM 如何做到这一点。 @second/package 将拥有自己的 node_modules 文件夹,其中包含 @foo/bar

的 2.0 版
./node_modules/@foo/bar                              # version 3.0
./node_modules/@second/package/node_modules/@foo/bar # version 2.0

然而--

我也想安装@zip/zap的8.0版本。

但是 @second/package 想要安装 @zip/zap 的 7.0 版。

@foo/bar的2.0版本要安装@zip/zap的6.0版本。

./node_modules/@foo/bar                              # version 3.0
./node_modules/@zip/zap                              # version 8.0
./node_modules/@second/package/node_modules/@foo/bar # version 2.0
./node_modules/@second/package/node_modules/@zip/zip # version 7.0    

# where does version 6.0 of @zip/zap go?

@zip/zap 的 6.0 版在哪里结束? npm 是创建 thirdnode_module 文件夹,还是放弃并说无法解析此依赖关系树?还是第三件事?还是我对 npm 的理解还有问题?

在我去弄清楚如何用假包设置我自己的 npm 存储库来测试这个之前,我认为最好先问一下。

NPM,令我惊讶的是,做正确的事并继续嵌套子依赖项。即,回答问题

where does version 6.0 of @zip/zap go?

./node_modules/@second/package/node_modules/@foo/bar/node_modules/@zip/zap