npm3是为了使用使node_modules文件夹扁平化的依赖关系而引入的。显然,这并不总是真的。我有我的应用程序,让我们把它命名为A和我正在开发的一个模块B。该模块具有gulp作为依赖项和一些gulp插件,如gulp-rename。我本来希望gulp和gulp-rename在应用程序A的node-modules文件夹中(就像它把B作为依赖项一样)。但事实并非如此。gulp-rename实际上在A/node_modules中,但是gulp本身在A/node_modules/B/node_modules文件夹中。
有什么线索吗为什么会这样?
更新
我已经把这个问题缩小到了这个特殊的案例:
有一个应用程序A和一个我正在开发的模块,B。该模块具有gulp作为依赖项,package.json bin属性定义如下(B的package.json):
javascript "bin" { "gulp": "<some_valid_path>" }
我本来希望在我的应用程序gulp的node-modules文件夹中有A (因为它将B作为依赖项,并且由于npm3依赖扁平化)。但是很明显,npm把它放在了A/node_modules/B/node_modules文件夹中。这是一种有意的行为吗?为什么?
发布于 2016-02-07 09:58:21
好吧,npm尽可能地使依赖树变得平坦;然而,这并不意味着它总是完全平坦的。例如,如果依赖项D1依赖于A ^1.0.0,而D2依赖于A ^2.0.0,那么npm显然不能同时将这两个依赖项放到根node_modules中。A的一个版本(比如1.0.0)可能转到根目录,另一个版本必须转到node_modules/D2/node_modules,以便D2在它开始在父dir中查找它之前,就能在正确的版本中找到它。
https://stackoverflow.com/questions/35246679
复制相似问题