Module 如何强制NPM3安装嵌套依赖项?

Module 如何强制NPM3安装嵌套依赖项?,module,npm,dependencies,package,dependency-management,Module,Npm,Dependencies,Package,Dependency Management,我刚刚升级到,并注意到它所做的一个最大的改变是它强制执行了一个 您的依赖项现在将被安装到最大平面上。在可能的情况下,您的所有依赖项及其依赖项都将安装在项目的节点\u模块文件夹中,不进行嵌套。当两个(或多个)模块具有冲突的依赖项时,您将只看到嵌套在另一个模块下面的模块 因此,例如,如果包A依赖于包B,当您npm安装A时,您将获得以下文件结构: --- root/ |--- node_modules/ |--- A/ |--- B/ 取代版本2或更低版本中的旧文件结构: --- ro

我刚刚升级到,并注意到它所做的一个最大的改变是它强制执行了一个

您的依赖项现在将被安装到最大平面上。在可能的情况下,您的所有依赖项及其依赖项都将安装在项目的
节点\u模块
文件夹中,不进行嵌套。当两个(或多个)模块具有冲突的依赖项时,您将只看到嵌套在另一个模块下面的模块

因此,例如,如果包A依赖于包B,当您
npm安装A
时,您将获得以下文件结构:

--- root/
 |--- node_modules/
   |--- A/
   |--- B/
取代版本2或更低版本中的旧文件结构:

--- root/
 |--- node_modules/
   |--- A/
     |--- node_modules/
       |--- B/
我遇到的第一个(我肯定不是最后一个)问题是:

A不知道npm v3的行为,并且依赖于包B。但是A采用旧的(v2)文件结构,因为它的代码中有
节点模块/B
,而不是正确的
。/node\u模块/B
。现在A中的代码将无法编译,因为它正在错误的目录中查找
B/


如果我不想唠叨开发人员修复代码并等待A的更新,我想知道是否有一种方法可以设置一个选项,强制npm将A的依赖项安装在自己的
node\u modules
文件夹中,npm v2也会这样做。

当我睡眠不足时,就会发生这种情况。显而易见的解决办法不知怎么逃过了我的眼睛

$ cd node_modules/A/
$ npm install
$ cd ../../

我刚刚遇到了这个问题,并找到了解决这个问题的替代方法。由于Node.js随NPM一起提供,我能想到的唯一方法是降级到Node.js 0.10版本,它在NPM上提供了一个旧版本,将以旧方式安装依赖项。要降级,我使用并运行了
nvm,请使用0.10.0
。通过以下技巧,您可以在npm版本之间来回切换。希望有帮助

您是否为
npm安装
尝试了
--旧式捆绑

--legacy bundling参数将导致npm安装包,以便1.4之前的npm版本(例如节点0.8中包含的版本)可以安装包。这消除了所有自动重复数据消除


我遇到了同样的问题,我希望有更好的解决方案,因为使用此解决方案,您必须:
cd node_modules/a&&npm install
然后
cd node_modules/a/node_modules/B&&npm install
等等。。。据我所知,所有软件包都必须遵循npm处理依赖关系的新方法,才能使用npm 3.0,对吗?@Gabin据我所知,你是对的。这使升级依赖项成为一场噩梦。我将尝试一下,看看它是否有效。而且我相信你的说法“NPM随Node.js一起提供”是错误的;反过来说。Node随npm一起安装。我刚修好。谢谢谢谢我认为措辞令人困惑。因为当你说“npm随节点而来”时,这可能意味着npm随节点而来,也就是说,当你安装npm时,你会自动得到节点(不正确);或者npm随节点一起安装,即安装节点会给您一份npm副本(正确)。英语是愚蠢的。