我刚刚升级到 npm 3 版本,发现它最重要的变化之一是强制使用扁平化依赖树。
现在将最大程度地扁平化安装您的依赖项。只要可能,所有依赖项及其依赖项和它们的依赖项都将安装在项目的
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 在其自己的 node_modules
文件夹内安装 A 的依赖项,就像 npm v2 一样。
cd node_modules/A && npm install
,然后再运行cd node_modules/A/node_modules/B && npm install
,以此类推......根据我的理解,在npm 3.0版本中,所有的包都必须遵循新的依赖管理方式才能使用,是吗? - Gabin