npm3使用依赖项展平,以使node_modules
文件夹保持平整。显然,这并不总是正确的。我有我的应用程序,我们将其命名为A
以及我正在开发的模块B
。该模块具有gulp
作为依赖项和一些gulp
插件,如gulp-rename
。我希望在我的应用gulp
的{{1}}文件夹中包含gulp-rename
和node-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
文件夹中。这是一个预期的行为,为什么?
答案 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.