我刚刚升级到npm version 3,并注意到它所做的最大改变之一是它强制执行flat dependency tree。如何强制npm 3安装嵌套的依赖关系?
现在,您的依赖关系将被最大限度地平放。只要有可能,您的所有依赖项及其依赖项和他们的依赖项都将安装在您的项目的
node_modules
文件夹中,且不会嵌套。当两个(或更多)模块具有冲突的依赖关系时,您只会看到嵌套在另一个下面的模块。
因此,举例来说,如果包一个依赖于包乙,当你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/
在错误的目录中。
如果我不喜欢唠叨开发人员修复代码并等待一个的更新,我不知道是否有一种方法,我可以设置一个选项,这将迫使NPM安装一个的它自己的node_modules
文件夹内的依赖关系,npm v2也会这样做。
我遇到同样的问题,我希望有,因为这一个你必须去一个更好的解决方案:'CD node_modules/A && NPM install'然后'CD node_modules/A/node_modules/B && NPM安装“等......从我所了解的情况来看,所有的包必须遵循新的npm句柄依赖关系,才能使用npm 3.0,对吧? – Gabin
@加宾据我所知,你是对的。它使升级依赖成为一场噩梦。 – chharvey