如何强制npm 3安装嵌套依赖项?

时间:2015-10-24 17:30:39

标签: module npm dependencies package dependency-management

我刚刚升级到npm version 3,发现其中一个最大的变化是强制执行flat dependency tree

  

您的依赖项现在将最大程度地安装。在可能的情况下,所有依赖项及其依赖项和它们的依赖项都将安装在项目的node_modules文件夹中,而不进行嵌套。当两个(或更多)模块具有冲突的依赖关系时,您只会看到彼此嵌套的模块。

例如,如果包 A 依赖于包 B ,当您npm install A时,您将获得此文件结构:

--- root/
 |--- node_modules/
   |--- A/
   |--- B/

而不是版本2或更低版本的旧文件结构:

--- root/
 |--- node_modules/
   |--- A/
     |--- node_modules/
       |--- B/

我遇到的第一个(我肯定不是最后一个)问题是:

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

如果我不想唠叨开发人员来修复代码并等待 A 的更新,我想知道是否有一种方法可以设置强制npm安装的选项< strong> A 在其自己的node_modules文件夹中的依赖关系,与npm v2完成的方式相同。

3 个答案:

答案 0 :(得分:22)

您是否曾--legacy-bundling尝试npm install

https://docs.npmjs.com/cli/install

  

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

答案 1 :(得分:3)

当我睡眠不足时会发生这种情况。显而易见的解决方案以某种方式逃过了我。

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

答案 2 :(得分:0)

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