2013-04-11 11 views
5

Ich habe ein paar Knotenpakete installiert und was ich festgestellt habe ist, dass NPM eine Reihe von Duplikaten erstellt.Der Node Package Manager (NPM) scheint doppelte Pakete zu liefern

Zum Beispiel installierte ich zuerst Mungo, die natürlich eine Reihe von Abhängigkeiten installiert. Dann habe ich das mongodb-Paket installiert, das auch mit bson als Abhängigkeit kam. Aufgrund Abhängigkeiten überlappen, habe ich die folgende Anomalie:

MongoDB in den folgenden Verzeichnissen vorhanden ist:

/usr/local/lib/node_modules/mongodb/ 
/usr/local/lib/node_modules/mongoose/node_modules/mongodb/ 

Auch BSON, eine Abhängigkeit von mongodb in diese beiden vorhanden ist:

/usr/local/lib/node_modules/mongodb/ 
/usr/local/lib/node_modules/mongoose/node_modules/mongodb/ 

Ich weiß, dies sind nur Dateien von Kilobyte, aber ich glaube, das könnte eine Menge Redundanz Ende ich könnte am Ende mit einem sehr komplexen Baum ähnlich dem folgenden:

/usr/local/lib/node_modules/[something1]/node_modules/[something2]/node_modules/[something3/.../.../node_modules/[somethingX]/ 

In diesem Szenario kann eine gegebene [Abhängigkeit] auf X-Ebenen unter/usr/local/lib/node_modules vorhanden sein.

Mein Hauptproblem betrifft die Aktualisierung dieser Module. Ich kann mir nicht vorstellen, dass gleichzeitige Module verschiedener Versionen gleichzeitig installiert sind.

Wäre es nicht einfacher, alles direkt in/usr/local/lib/node_modules/zu setzen und dann Abhängigkeiten zu referenzieren?

Antwort

3

Das Problem ist, wenn Mungo nur mit say v1 von mongodb funktioniert, und Sie haben Ihre App so programmiert, dass sie mit v2 von mongodb funktioniert - als solche installiert und lädt sie beide Versionen, so dass alles funktioniert. Wir können dies leicht im Knoten tun, da der Required-Modul-Weg den globalen Namespace im Gegensatz zum Browser nicht verschmutzt - was das Management und das Einbeziehen der richtigen Abhängigkeiten zu einem königlichen Schmerz macht, aufgrund der globalen Namensraumverschmutzung.

Wenn nun Ihre package.json und mongoose package.json die gleiche mongodb-Version zulassen (Sie können eine bestimmte Version oder Bereiche angeben), dann wird eine rm -Rf node_modules; npm install nur eine Kopie von mongodb installieren, anstatt zwei. Wie bereits gesagt, wenn mehrere Versionen angegeben sind, werden mehrere Versionen installiert und geladen.

+0

Erzeugt das nicht eine hektische Hierarchie, nachdem Sie eine Reihe verschiedener Module installiert und eine Reihe verschiedener Projekte gestartet haben? Gibt es eine Möglichkeit, ein rekursives Update mit NPM auszuführen? – zcserei

+0

Wenn Menschen winzige Module programmieren, die eines Tages fertig sein werden, anstatt große Module, die immer aktualisiert werden, wird nur eine Kopie des Moduls installiert. Es stellt sich heraus, dass es in Wirklichkeit kein großes Problem ist, da die meisten Knotenmodule winzig sind und wenn sie nicht für eine Weile Substack (James Halliday - http://substack.net/) hören dann bin ich überzeugt, die kleine Philosophie auch zu übernehmen :) Vor einiger Zeit postete ich einige Gedanken zu diesem genauen Thema hier: https://gist.github.com/balupton/5308717 vielleicht wird es helfen, es dauerte ewig, bis ich dazu kam auch das :) – balupton

+0

'wenn [beide] ... die gleiche [] Version zulassen ... wird nur eine Kopie installiert' Warum macht es das dann nicht? Ich habe einen speziellen Fall, in dem nur eine Kopie verwendet werden sollte, aber mehrere Kopien installiert werden, und es dauert sehr lange, weil ... nun, ich bin mir nicht sicher, warum, aber jede Installation dauert eine ganze Weile! – Michael

Verwandte Themen