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 depcheckne fonctionne pas correctement! (Par exemple, je l'ai essayé avec Typescript et cela a donné des erreurs d'analyse inutiles)
Pour l'analyse, package.jsonnous 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 findcommande. La première et la deuxième ligne font ignorer les dossiers node_moduleset 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 catle package.json. Obtient ensuite jqle 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, sedextrait les parties entre les guillemets, le nom du package. -net lui .../pdit d'imprimer les parties correspondantes et rien d'autre à partir de jqla sortie JSON de. Ensuite, nous lisons cette liste de noms de packages dans une whileboucle.
RESest 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.jsonfichiers ( liboption)
- Vous devez
grepmanuellement pour uniquement les fichiers ^USEDet 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.