516 Stimmen

Npm Befehl zum Deinstallieren oder Aufräumen von ungenutzten Paketen in Node.js

Gibt es eine Möglichkeit, einfach alle ungenutzten (undeclared) Abhängigkeiten aus einem Node.js-Projekt zu deinstallieren (die nicht mehr in meiner package.json definiert sind). Wenn ich meine Anwendung aktualisiere, möchte ich, dass die nicht referenzierten Pakete automatisch entfernt werden.

796voto

Darkhogg Punkte 13392

Hinweis: Aktuelle npm-Versionen erledigen dies automatisch beim Ausführen von npm install, wenn Paket-Sperren aktiviert sind, daher ist dies nicht notwendig, außer um Entwicklungs-Pakete mit dem Flag --production zu entfernen.


Führen Sie npm prune aus, um Module zu entfernen, die nicht in package.json aufgeführt sind.

Von npm help prune:

Dieser Befehl entfernt "unnötige" Pakete. Wenn ein Paketname angegeben wird, werden nur Pakete entfernt, die mit einem der angegebenen Namen übereinstimmen.

Unnötige Pakete sind Pakete, die nicht in der Abhängigkeitsliste des übergeordneten Pakets aufgeführt sind.

Wenn das Flag --production angegeben ist, entfernt dieser Befehl die in Ihren devDependencies angegebenen Pakete.

382voto

Pyrce Punkte 8086

Wenn Ihnen ein paar Minuten Zeit nichts ausmachen, eine Lösung wäre, rm -rf node_modules auszuführen und npm install erneut auszuführen, um die lokalen Module neu zu erstellen.

27voto

Igor Litvinovich Punkte 2196

Sie können npm prune verwenden, um überflüssige Pakete zu entfernen.

npm prune [[<@scope>/]...] [--production] [--dry-run] [--json]

Dieser Befehl entfernt "überflüssige" Pakete. Wenn ein Paketname angegeben wird, werden nur Pakete entfernt, die einem der angegebenen Namen entsprechen.

Überflüssige Pakete sind Pakete, die nicht in der Abhängigkeitsliste des übergeordneten Pakets aufgeführt sind.

Wenn das Flag --production angegeben ist oder die Umgebungsvariable NODE_ENV auf production gesetzt ist, werden mit diesem Befehl die in Ihren devDependencies angegebenen Pakete entfernt. Durch Setzen von --no-production wird die Einstellung von NODE_ENV auf production aufgehoben.

Wenn das Flag --dry-run verwendet wird, werden tatsächlich keine Änderungen vorgenommen.

Wenn das Flag --json verwendet wird, werden die Änderungen, die npm prune gemacht hat (oder gemacht hätte mit --dry-run), als JSON-Objekt ausgegeben.

Im normalen Betrieb mit aktivierten Paket-Sperren werden überflüssige Module automatisch entfernt, wenn Module installiert werden, und Sie benötigen diesen Befehl nur mit dem --production Flag.

Wenn Sie Paket-Sperren deaktiviert haben, werden überflüssige 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 Duplikate zu reduzieren

npm dedupe
npm ddp

Durchsucht den lokalen Paketbaum und versucht, die Gesamtstruktur zu vereinfachen, indem Abhängigkeiten weiter oben im Baum verschoben werden, wo sie effektiver von mehreren abhängigen Paketen gemeinsam genutzt werden können.

Zum Beispiel betrachten Sie diesen Abhängigkeitsgraphen:

a
+-- b <-- hängt von c@1.0.x ab
|    `-- c@1.0.3
`-- d <-- hängt von c@~1.0.9 ab
     `-- c@1.0.10

In diesem Fall wird npm-dedupe den Baum transformieren zu:

 a
 +-- b
 +-- d
 `-- c@1.0.10

Aufgrund der hierarchischen Natur der Knotenmodule von Node erhalten b und d ihre Abhängigkeit beide von dem einzelnen c-Paket auf der obersten Ebene des Baums.

Der Algorithmus zur Deduplizierung durchläuft den Baum und verschiebt jede Abhängigkeit so weit wie möglich nach oben im Baum, auch wenn Duplikate nicht gefunden werden. Dies führt zu einem flachen und deduplizierten Baum.

9voto

SahilSea Punkte 99

Sie können npx depcheck ausführen, um die Liste der Abhängigkeiten und devDependencies zu erhalten, die im Projekt nicht verwendet werden.

Dann können Sie npm uninstall pkg1 pkg2 und so weiter ausführen, um die Abhängigkeiten zu entfernen.

Oder Sie können die Abhängigkeiten auch aus package.json entfernen und die Pakete nach dem Löschen von node_modules und package-lock.json neu installieren

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X