2013-08-14 7 views
8

Ich verwendete npm install --dev, um die Abhängigkeiten zu installieren, die in einer package.json Datei aufgelistet sind, und es scheint, dass, anstatt alle Pakete in einer flachen Struktur zu installieren, es die Abhängigkeiten jedes Moduls innerhalb des Moduls installiert Verzeichnis.npm installiert Abhängigkeiten auf eine seltsame rekursive Weise

Ich musste es abbrechen, weil es viel dauerte, weil viele Abhängigkeiten bereits erfüllt sein sollten, aber es musste sie in einem anderen geschachtelten Verzeichnis erneut herunterladen (und ich hoffe, dass es keine Schleifen gibt und es hätte schließlich fertig) ...

den Baum Befehl Mit diesem ist ein Beispiel dafür, was ich erhalte:

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

Irgendwelche Ideen, warum dies geschieht werden könnte?

Antwort

14

Mach dir keine Sorgen, das ist eigentlich die Art, wie Npm entworfen wurde. Möglicherweise sehen Sie sogar das gleiche Modul mehrmals installiert (obwohl in der Regel mit verschiedenen Versionen).

Die Idee ist, dass jedes Modul, das unter node_modules installiert wird, eine etwas eigenständige Installation des Moduls mit seinen Abhängigkeiten und den notwendigen Versionen ist - es hängt nicht von global installierten Modulen ab.

Wenn Sie sich Sorgen machen, dass die Module mehrere Male ineffizient sind, ist das experimentelle npm dedupe.

+1

Aber warum? Ich habe Mühe, ein brauchbares Argument für diesen Ansatz zu finden, wenn ich im Internet surfe. Was ist falsch daran, sie global zu installieren oder eine flache Struktur zu verwenden? Welche Probleme löst das eigentlich? Sieht so aus, als könnten Sie alles in einer flachen Struktur installieren und einfach Versionen in die Verzeichnisnamen einfügen, um Konflikte zu vermeiden. Die derzeitige Implementierung scheint sehr ineffizient zu sein. – Danny

+2

Überprüfen Sie diesen Artikel aus @Danny: http://dontkry.com/posts/code/modules-the-right-way.html – jackyalcine

+1

DANK @jackyalcine für diesen Link. Ich war sehr frustriert mit NPM. Aber dieser Artikel klärt alles auf und gibt mir einige großartige Tools, um das Verzeichnistiefe-Problem zu lösen. (Ja, ich benutze leider windoz). –

2

dedupe ist hilfreich, wie Jonathan Warden sagt. Jedoch, try npm3. Für ein einfaches Paket wie gulp-jscs betrug die Installation von npm3 20% weniger Dateien, 5% weniger Speicherplatz. Und die Baumtiefe ging von 22 auf 5. Allerdings war npm3 2x langsamer für mich.

Verwandte Themen