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.
Antworten
Zu viele Anzeigen?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.
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.
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