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

chh*_*vey 19 dependencies module package dependency-management npm

我刚刚升级到npm版本3,并注意到它所做的一个最大的改变是它强制执行一个平面依赖树.

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

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

--- root/
 |--- node_modules/
   |--- A/
   |--- B/
Run Code Online (Sandbox Code Playgroud)

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

--- root/
 |--- node_modules/
   |--- A/
     |--- node_modules/
       |--- B/
Run Code Online (Sandbox Code Playgroud)

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

包装一个不知道的NPM V3的行为,并且依赖于包.但是A假设旧的(v2)文件结构,因为它node_modules/B在代码中而不是正确的../node_modules/B.现在来自A的代码将无法编译,因为它B/在错误的目录中查找.

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

Kon*_*agg 23

您是否尝试过--legacy-bundlingnpm install

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

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