fiskeben schrieb:
Der Nachteil ist, dass es nicht vollautomatisch ist, dh es packt keine Paketnamen aus package.json und überprüft sie. Sie müssen dies für jedes Paket selbst tun.
Lassen Sie uns Fiskebens Antwort automatisieren, wenn sie aus irgendeinem Grund depchecknicht richtig funktioniert! (ZB habe ich es mit Typescript versucht und es gab unnötige Analysefehler)
Zum Parsen können package.jsonwir die Software verwenden jq. Für das folgende Shell-Skript ist ein Verzeichnisname erforderlich, mit dem begonnen werden soll.
#!/bin/bash
DIRNAME=${1:-.}
cd $DIRNAME
FILES=$(mktemp)
PACKAGES=$(mktemp)
find . \
-path ./node_modules -prune -or \
-path ./build -prune -or \
\( -name "*.ts" -or -name "*.js" -or -name "*.json" \) -print > $FILES
function check {
cat package.json \
| jq "{} + .$1 | keys" \
| sed -n 's/.*"\(.*\)".*/\1/p' > $PACKAGES
echo "--------------------------"
echo "Checking $1..."
while read PACKAGE
do
RES=$(cat $FILES | xargs -I {} egrep -i "(import|require).*['\"]$PACKAGE[\"']" '{}' | wc -l)
if [ $RES = 0 ]
then
echo -e "UNUSED\t\t $PACKAGE"
else
echo -e "USED ($RES)\t $PACKAGE"
fi
done < $PACKAGES
}
check "dependencies"
check "devDependencies"
check "peerDependencies"
Zuerst werden zwei temporäre Dateien erstellt, in denen Paketnamen und -dateien zwischengespeichert werden können.
Es beginnt mit dem findBefehl. In der ersten und zweiten Zeile werden die Ordner node_modulesund build(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 catdaspackage.json . Ruft jqdann 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, sedextrahiert die Teile zwischen den Anführungszeichen, der Paketnamen. -nund.../p weist es an, die passenden Teile und nichts anderes aus jqder JSON-Ausgabe zu drucken . Dann lesen wir diese Liste der Paketnamen in eine whileSchleife.
RESist die Anzahl der Vorkommen des Paketnamens in Anführungszeichen. Im Moment ist es import/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:
- Es werden keine Dateien in verschiedenen Importen gefunden, z
tsconfig.json Dateien (lib Option)
- Sie müssen
grepnur für ^USEDund manuellUNUSED Dateien .
- Bei großen Projekten ist es langsam - Shell-Skripte lassen sich oft nicht gut skalieren. Aber hoffentlich rennst du nicht so oft.