8

我曾经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

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

4

2 回答 2

14

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

这个想法是,安装在 node_modules 下的每个模块都是该模块的某种独立安装,具有其依赖项和必要的版本——它不依赖于全局安装的模块。

如果您担心多次安装模块效率低下,请使用实验性npm dedupe

于 2013-08-15T22:01:13.273 回答
2

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

于 2016-04-15T20:40:05.217 回答