Gibt es eine Möglichkeit, einfach alle nicht verwendeten (nicht deklarierten) Abhängigkeiten aus einem Node.js-Projekt zu deinstallieren (solche, die in meinem nicht mehr definiert sind package.json
)? Wenn ich meine Anwendung aktualisiere, möchte ich, dass die nicht referenzierten Pakete automatisch entfernt werden.
414
node_modules
wenn sie aus den jeweiligen Ordnern entfernt wurdenpackage.json
?Antworten:
Hinweis : Neuere
npm
Versionen tun dies automatisch, wenn Paketsperren aktiviert sind. Dies ist daher nur zum Entfernen von Entwicklungspaketen mit dem--production
Flag erforderlich .Ausführen
npm prune
, um Module zu entfernen, die nicht in aufgeführt sindpackage.json
.Von
npm help prune
:quelle
package.json
. Ist das richtig? Das nächste Update oder die nächste Installation müsste sie also neu installieren.node_modules
Verzeichnis des Moduls gespeichert , sodass sie mit dem Modul entfernt werden.package.json
, verlasse aber die Laube. Wenn ich laufenpm prune
, erwarte ich, dass das gesamte Karma, einschließlich seines eigenennode_modules
Ordners mit seinen Abhängigkeiten, entfernt wird. Was ist mit den Abhängigkeiten von bower (bower-json, bower-logger, chmodr, fstream, glob, et al.). Technisch gesehen sind diese nicht in meinen Projekten aufgeführtpackage.json
. Werden diese entfernt oder nicht?node_modules
, sondern im Innerennode_modules/bower/node_modules
"geschützt" sindnode_modules/bower/package.json
. Die Abhängigkeiten Ihres Pakets und die Abhängigkeiten Ihres Pakets werden nicht gemischt .Wenn Sie nicht über ein paar Minuten Zeit besorgt , dies zu tun, wäre eine Lösung sein
rm -rf node_modules
undnpm install
wieder die lokalen Module neu zu erstellen.quelle
node_modules
auch überprüft, ob diepackage.json
Datei ein reproduzierbares Abhängigkeitsdiagramm beschreibt. Das Entfernen und erneute Installieren vonnode_modules
ist im Grunde ein Bereitstellungstest.npm prune
hat einem Jota nicht geholfen, aber das hat es getan. Mein Problem war ein defekter Symlink.Sie können npm-prune verwenden , um überflüssige Pakete zu entfernen.
Dieser Befehl entfernt "fremde" Pakete. Wenn ein Paketname angegeben wird, werden nur Pakete entfernt, die mit einem der angegebenen Namen übereinstimmen.
Fremdpakete sind Pakete, die nicht in der Abhängigkeitsliste des übergeordneten Pakets aufgeführt sind.
Wenn das Flag --production angegeben oder die Umgebungsvariable NODE_ENV auf Produktion gesetzt ist , entfernt dieser Befehl die in Ihren devDependencies angegebenen Pakete . Wenn Sie --no-Production einstellen , wird NODE_ENV negiert, wenn die Produktion eingestellt wird .
Wenn der --dry-run verwendet wird, werden tatsächlich keine Änderungen vorgenommen.
Wenn das Flag --json verwendet wird, werden die Änderungen npm prune vorgenommen (oder mit --dry-run vorgenommen) ), als JSON-Objekt gedruckt.
Im normalen Betrieb mit aktivierten Paketsperren werden Fremdmodule automatisch entfernt, wenn Module installiert werden, und Sie benötigen diesen Befehl nur mit der --production Flag .
Wenn Sie Paketsperren deaktiviert haben, werden externe Module nicht entfernt, und es liegt an Ihnen, von Zeit zu Zeit npm prune auszuführen , um sie zu entfernen.
Verwenden Sie npm-dedupe, um die Duplizierung zu reduzieren
Durchsucht den lokalen Paketbaum und versucht, die Gesamtstruktur zu vereinfachen, indem Abhängigkeiten weiter nach oben verschoben werden, wo sie von mehreren abhängigen Paketen effektiver gemeinsam genutzt werden können.
Betrachten Sie beispielsweise dieses Abhängigkeitsdiagramm:
In diesem Fall, transformiert npm-dedupe den Baum in:
Aufgrund der hierarchischen Natur der Modulsuche des Knotens erhalten b und d ihre Abhängigkeit vom einzelnen c-Paket auf der Stammebene des Baums.
Der Deduplizierungsalgorithmus geht den Baum entlang und verschiebt jede Abhängigkeit so weit wie möglich im Baum nach oben, auch wenn keine Duplikate gefunden werden. Dies führt sowohl zu einem flachen als auch zu einem deduplizierten Baum.
quelle