NPM如何处理与Sub/Transitive Dependencies的冲突



我(自己(刚刚发现,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是创建一个第三级node_module文件夹,还是放弃并表示无法解决此依赖树?还是第三件事?还是我对npm的理解仍然有缺陷?

在我想办法用假软件包建立自己的npm存储库来测试之前,我想最好问问。

NPM,令我惊讶的是,做了正确的事情并继续嵌套子依赖关系。即问题的答案

@zip/zap的6.0版本在哪里?

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

最新更新