npm正在以一种奇怪的递归方式安装依赖项

npm正在以一种奇怪的递归方式安装依赖项,npm,Npm,我使用npm install--dev来安装package.json文件中列出的依赖项,它似乎不是在平面结构中安装所有包,而是在模块目录中安装每个模块的依赖项 我不得不取消它,因为它花费了很多时间,因为许多依赖项应该已经满足了,但它必须在不同的嵌套目录中重新下载它们(我希望没有循环,它最终会完成) 使用tree命令,这是我得到的一个示例: ├── grunt-cli │   └── node_modules │   ├── findup-sync │   │   └── node

我使用
npm install--dev
来安装
package.json
文件中列出的依赖项,它似乎不是在平面结构中安装所有包,而是在模块目录中安装每个模块的依赖项

我不得不取消它,因为它花费了很多时间,因为许多依赖项应该已经满足了,但它必须在不同的嵌套目录中重新下载它们(我希望没有循环,它最终会完成)

使用tree命令,这是我得到的一个示例:

├── grunt-cli
│   └── node_modules
│       ├── findup-sync
│       │   └── node_modules
│       │       ├── glob
│       │       │   └── node_modules
│       │       │       ├── minimatch
│       │       │       │   └── node_modules
│       │       │       │       ├── lru-cache
│       │       │       │       │   └── node_modules
│       │       │       │       │       └── weak
│       │       │       │       │           └── node_modules
│       │       │       │       │               └── mocha
│       │       │       │       │                   └── node_modules
│       │       │       │       │                       ├── coffee-script
│       │       │       │       │                       │   └── node_modules
│       │       │       │       │                       │       └── jison
│       │       │       │       │                       │           └── node_modules
│       │       │       │       │                       │               └── browserify
│       │       │       │       │                       │                   └── node_modules
│       │       │       │       │                       │                       ├── browser-resolve
│       │       │       │       │                       │                       │   └── example

你知道为什么会发生这种情况吗?

别担心,Npm就是这样设计的。您甚至可能会看到同一个模块被多次安装(尽管通常使用不同的版本)

其思想是,安装在node_modules下的每个模块都是该模块的一个自包含式安装,带有其依赖项和必要的版本——它不依赖于全局安装的模块


如果您担心多次安装的模块效率低下,正如Jonathan Warden所说,实验性的重复数据消除是有帮助的。然而。对于gulp jscs这样的简单软件包,npm3的安装减少了20%的文件,减少了5%的磁盘空间。树的深度从22到5。然而,npm3对我来说慢了2倍。

但为什么?当我在网上搜索时,我正在努力为这种方法找到一个有效的论据。整体安装或使用平面结构有什么问题?这实际上解决了什么问题?似乎您可以在平面结构中安装所有内容,只需在目录名中包含版本以避免冲突。当前的实现似乎效率很低。请查看这篇文章@Danny:Thank@jackyalcine的链接。我对NPM非常失望。但是那篇文章澄清了这一切,并为我提供了一些很好的工具来管理目录深度问题。(是的,很遗憾,我正在使用windoz)。很高兴这对@JohnHenckel有帮助!