1

npm3 引入了使用依赖项扁平化,以便node_modules文件夹是扁平的。显然这并不总是正确的。我有我的应用程序,让我们命名它A和我正在开发的模块,B. 该模块具有gulp依赖项和一些gulp插件,例如gulp-rename. 我期望在我的应用程序的文件夹中拥有gulp和(因为它作为依赖项)。但这种情况并非如此。实际上是 in但它本身在文件夹中。gulp-renamenode-modulesABgulp-renameA/node_modulesgulpA/node_modules/B/node_modules

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

更新

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

拥有A我正在开发的应用程序和模块,B. 该模块具有gulp依赖项和 package.jsonbin属性,定义如下(B's package.json):

javascript "bin" { "gulp": "<some_valid_path>" }

我期望在我的应用程序gulpnode-modules文件夹中A拥有(因为它B作为依赖项并且由于 npm3 依赖项扁平化)。但显然 npm 将其留在A/node_modules/B/node_modules文件夹中。这是一种预期的行为,为什么?

4

1 回答 1

1

好吧,npm尽可能地扁平化你的依赖树;然而,这并不意味着它总是完全平坦的。例如,如果您的依赖项 D1 依赖于 A ^1.0.0 而 D2 依赖于 A ^2.0.0,npm显然不能将这两个依赖项node_modules同时放到根目录。A 的一个版本(比如 1.0.0)可能会进入根目录,而另一个版本必须进入node_modules/D2/node_modulesD2 才能在正确版本中找到 A,然后才开始在父目录中查找它。

于 2016-02-07T09:58:21.857 回答