fiskeben ha scritto:
Il rovescio della medaglia è che non è completamente automatico, cioè non estrae i nomi dei pacchetti da package.json e li controlla. È necessario farlo da soli per ogni pacchetto.
Rendiamo automatizzata la risposta di Fiskeben se per qualsiasi motivo depcheck non funziona correttamente! (Ad esempio, l'ho provato con Typescript e ha dato errori di analisi non necessari)
Per l'analisi package.jsonpossiamo usare il software jq. Lo script di shell sottostante richiede un nome di directory da cui iniziare.
#!/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"
Innanzitutto crea due file temporanei in cui è possibile memorizzare nella cache nomi e file dei pacchetti.
Si inizia con il findcomando. La prima e la seconda riga lo fanno ignorare node_modulesebuild cartelle (o qualunque cosa tu voglia). La terza riga contiene estensioni consentite, puoi aggiungerne altre qui, ad es. File JSX o JSON.
Una funzione leggerà i tipi dipendenti.
Prima è catil package.json. Quindi, jqottiene il gruppo di dipendenze richiesto. ( {} +esiste in modo tale da non generare un errore se ad esempio non ci sono dipendenze tra pari nel file.)
Successivamente, sedestrae le parti tra virgolette, il nome del pacchetto. -ne gli .../pdice di stampare le parti corrispondenti e nient'altro jqdall'output JSON di. Quindi leggiamo questo elenco di nomi di pacchetti in un whileciclo.
RESè il numero di occorrenze del nome del pacchetto tra virgolette. In questo momento è import/ require... 'package'/"package" . Fa il lavoro per la maggior parte dei casi.
Quindi contiamo semplicemente il numero di righe del risultato, quindi stampiamo il risultato.
Avvertenze:
- Non troverai file in diverse importazioni, ad es.
tsconfig.jsonFile (lib opzione)
- Devi
grepmanualmente solo per ^USEDe UNUSEDfile.
- È lento per progetti di grandi dimensioni: gli script di shell spesso non si adattano bene. Ma spero che non correrai così tante volte.