npm3没有完全展平依赖结构

时间:2016-02-06 21:28:38

标签: npm npm-install

npm3使用依赖项展平,以使node_modules文件夹保持平整。显然,这并不总是正确的。我有我的应用程序,我们将其命名为A以及我正在开发的模块B。该模块具有gulp作为依赖项和一些gulp插件,如gulp-rename。我希望在我的应用gulp的{​​{1}}文件夹中包含gulp-renamenode-modules(因为它有A作为依赖项)。但这种情况并非如此。 B实际上位于gulp-rename,但A/node_modules本身位于gulp文件夹中。

任何线索为什么会发生这种情况?

更新

我已经将问题缩小到这个特殊情况:

拥有应用A/node_modules/B/node_modules和我正在开发的模块A。该模块将B作为依赖项,并将package.json gulp属性定义为以下(bin" package.json):

B

我希望在我的应用javascript "bin" { "gulp": "<some_valid_path>" } 的{​​{1}}文件夹中有gulp(因为它有node-modules作为依赖项,因为npm3依赖扁平化)。但显然npm将它留在A文件夹中。这是一个预期的行为,为什么?

1 个答案:

答案 0 :(得分:1)

好吧,npm尽可能地平衡你的依赖树;然而,这并不意味着它总是完全平坦。例如,如果依赖关系D1依赖于A ^ 1.0.0且D2依赖于A ^ 2.0.0,npm显然不能同时将这两个依赖关系放到根node_modules。一个版本的A(比如说1.0.0)可能会转到root,另一个版本必须转到node_modules/D2/node_modules,这样D2在它开始在父目录中查找之前就会找到正确版本的A.