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

时间:2013-08-14 20:06:49

标签: npm

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

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

使用树命令,这是我得到的一个例子:

├── 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

为什么会发生这种情况的任何想法?

2 个答案:

答案 0 :(得分:14)

别担心,这实际上是Npm的设计方式。您甚至可能会多次安装相同的模块(尽管通常使用不同的版本)。

我们的想法是,在node_modules下安装的每个模块都是该模块的一个独立安装及其依赖项和必要的版本 - 它不依赖于全局安装的模块。

如果您担心多次安装模块的效率低下,则需要实验npm dedupe

答案 1 :(得分:2)

正如Jonathan Warden所说,重复数据删除是有帮助的。但是,try npm3。对于像gulp-jscs这样的简单软件包,npm3的安装量减少了20%,磁盘空间减少了5%。并且树的深度从22变为5.但是npm3对我来说慢了2倍。