npm is installing dependencies in a weird recursiv

2020-02-28 07:22发布

问题:

I used npm install --dev to install the dependencies listed in a package.json file and it seems that rather than installing all the packages in a flat structure, it is installing the dependencies of each module inside the module's directory.

I had to cancel it because it was taking a lot, because many dependencies should have been already satisfied but it had to re-download them in a different nested directory (and I hope that there are not loops and it would have eventually finished)...

Using the tree command this is an example of what I am getting:

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

Any ideas why this might be happening?

回答1:

Don't worry, that's actually the way Npm was designed. You may even see the same module installed many times (though typically with different versions).

The idea is that each module installed under node_modules is a somewhat self-contained installation of that module with its dependencies and the necessary versions -- it doesn't depend on modules installed globally.

If you are worried about inefficiency of modules being installed multiple times, the experimental npm dedupe.



回答2:

dedupe is helpful, as Jonathan Warden says. However, try npm3. For a simple package such as gulp-jscs the install of npm3 was 20% fewer files, 5% less disk space. And tree depth went from 22 to 5. However npm3 was 2x slower for me.



标签: npm