Gibt es eine Möglichkeit festzustellen, ob Ihre package.json-Datei Pakete enthält, die nicht mehr benötigt werden?
Wenn ich zum Beispiel ein Paket ausprobiere und später Code kommentiere oder lösche, aber vergesse, ihn zu deinstallieren, habe ich ein paar Pakete, die gelöscht werden könnten.
Was wäre ein effizienter Weg, um festzustellen, ob ein Paket sicher gelöscht werden kann?
node.js
dependencies
npm
Josh C.
quelle
quelle
depcheck
jedes Paket alsunused
falsch aufnpx depcheck
Es gibt auch ein Paket namens
npm-check
:Es ist ziemlich mächtig und aktiv entwickelt. Eine seiner Funktionen ist die Überprüfung auf nicht verwendete Abhängigkeiten - für diesen Teil wird das
depcheck
in der anderen Antwort erwähnte Modul verwendet .quelle
npm outdated
prüft und listet aktuelle, gesuchte und neueste Paketversionen auf. Keine Liste nicht verwendeter Pakete.Wenn Sie ein Unix wie OS (Linux, OSX usw.) verwenden, können Sie eine Kombination aus
find
und verwendenegrep
, um nach erforderlichen Anweisungen zu suchen, die Ihren Paketnamen enthalten:Wenn Sie nach der gesamten
require('name-of-package')
Anweisung suchen , denken Sie daran, die richtigen Anführungszeichen zu verwenden:oder
Der Nachteil ist, dass es nicht vollautomatisch ist, dh es werden keine Paketnamen extrahiert
package.json
und überprüft. Sie müssen dies für jedes Paket selbst tun. Dapackage.json
es sich nur um JSON handelt, kann dies behoben werden, indem ein kleines Skript geschrieben wird, mitchild_process.exec
dem dieser Befehl für jede Abhängigkeit ausgeführt wird. Und mach daraus ein Modul. Und fügen Sie es dem NPM-Repo hinzu ...quelle
.jsx
Dateien und.ts
Dateien usw .: Dfiskeben schrieb:
Lassen Sie uns Fiskebens Antwort automatisieren, wenn sie aus irgendeinem Grund
depcheck
nicht richtig funktioniert! (ZB habe ich es mit Typescript versucht und es gab unnötige Analysefehler)Zum Parsen können
package.json
wir die Software verwendenjq
. Für das folgende Shell-Skript ist ein Verzeichnisname erforderlich, mit dem begonnen werden soll.Zuerst werden zwei temporäre Dateien erstellt, in denen Paketnamen und -dateien zwischengespeichert werden können.
Es beginnt mit dem
find
Befehl. In der ersten und zweiten Zeile werden die Ordnernode_modules
undbuild
(oder was auch immer Sie wollen) ignoriert . Die dritte Zeile enthält zulässige Erweiterungen. Sie können hier weitere hinzufügen, z. B. JSX- oder JSON-Dateien.Eine Funktion liest abhängige Typen.
Zuerst ist es
cat
daspackage.json
. Ruftjq
dann die erforderliche Abhängigkeitsgruppe ab. ({} +
Ist vorhanden, damit kein Fehler ausgegeben wird, wenn z. B. keine Peer-Abhängigkeiten in der Datei vorhanden sind.)Danach,
sed
extrahiert die Teile zwischen den Anführungszeichen, der Paketnamen.-n
und.../p
weist es an, die passenden Teile und nichts anderes ausjq
der JSON-Ausgabe zu drucken . Dann lesen wir diese Liste der Paketnamen in einewhile
Schleife.RES
ist die Anzahl der Vorkommen des Paketnamens in Anführungszeichen. Im Moment ist esimport
/require
...'package'
/"package"
. Es macht den Job in den meisten Fällen.Dann zählen wir einfach die Anzahl der Ergebniszeilen und drucken das Ergebnis aus.
Vorsichtsmaßnahmen:
tsconfig.json
Dateien (lib
Option)grep
nur für^USED
und manuellUNUSED
Dateien .quelle
Wir können das folgende npm-Modul für diesen Zweck verwenden:
https://www.npmjs.com/package/npm-check-unused
quelle
Viele der Antworten hier sind, wie man unbenutzte Gegenstände findet.
Ich wollte sie automatisch entfernen .
Installieren Sie dieses Knotenprojekt.
$ npm install -g typescript tslint tslint-etc
Fügen Sie im Stammverzeichnis eine neue Datei tslint-imports.json hinzu
{ "extends": [ "tslint-etc" ], "rules": { "no-unused-declaration": true } }
Führen Sie dies auf eigenes Risiko durch, erstellen Sie ein Backup :)
$ tslint --config tslint-imports.json --fix --project .
quelle
npx depcheck --json | jq '.dependencies[]' | xargs -L1 npm rm