fiskeben a écrit:
L'inconvénient est qu'il n'est pas entièrement automatique, c'est-à-dire qu'il n'extrait pas les noms de paquet de package.json et ne les vérifie pas. Vous devez le faire vous-même pour chaque paquet.
Rendons la réponse de Fiskeben automatisée si, pour une raison quelconque, elle depcheck
ne fonctionne pas correctement! (Par exemple, je l'ai essayé avec Typescript et cela a donné des erreurs d'analyse inutiles)
Pour l'analyse, package.json
nous pouvons utiliser le logiciel jq
. Le script shell ci-dessous nécessite un nom de répertoire par où commencer.
#!/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"
Tout d'abord, il crée deux fichiers temporaires où nous pouvons mettre en cache les noms et les fichiers des packages.
Cela commence par la find
commande. La première et la deuxième ligne font ignorer les dossiers node_modules
et build
(ou tout ce que vous voulez). La troisième ligne contient les extensions autorisées, vous pouvez en ajouter d'autres, par exemple des fichiers JSX ou JSON.
Une fonction lira les types dépendants.
C'est d'abord cat
le package.json
. Obtient ensuite jq
le groupe de dépendances requis. ( {} +
est là pour ne pas générer d'erreur si par exemple il n'y a pas de dépendances entre pairs dans le fichier.)
Après cela, sed
extrait les parties entre les guillemets, le nom du package. -n
et lui .../p
dit d'imprimer les parties correspondantes et rien d'autre à partir de jq
la sortie JSON de. Ensuite, nous lisons cette liste de noms de packages dans une while
boucle.
RES
est le nombre d'occurrences du nom du package entre guillemets. En ce moment c'est import
/ require
... 'package'
/ "package"
. Il fait l'affaire dans la plupart des cas.
Ensuite, nous comptons simplement le nombre de lignes de résultat puis imprimons le résultat.
Avertissements:
- Impossible de trouver des fichiers dans différentes importations, par exemple des
tsconfig.json
fichiers ( lib
option)
- Vous devez
grep
manuellement pour uniquement les fichiers ^USED
et UNUSED
.
- C'est lent pour les grands projets - les scripts shell ne se développent souvent pas bien. Mais j'espère que vous ne courrez pas autant de fois.