fiskeben escribió:
La desventaja es que no es completamente automático, es decir, no extrae los nombres de paquetes de package.json y los verifica. Debe hacer esto para cada paquete usted mismo.
¡Hagamos que la respuesta de Fiskeben sea automática si por alguna razón depcheckno funciona correctamente! (Por ejemplo, lo probé con Typecript y me dio errores de análisis innecesarios)
Para analizar package.jsonpodemos usar el software jq. El siguiente script de shell requiere un nombre de directorio donde comenzar.
#!/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"
Primero crea dos archivos temporales donde podemos almacenar en caché los nombres de los paquetes y los archivos.
Comienza con el findcomando. La primera y segunda línea hacen que ignore las carpetas node_modulesy build(o lo que quiera). La tercera línea contiene extensiones permitidas, puede agregar más aquí, por ejemplo, archivos JSX o JSON.
Una función leerá tipos dependientes.
Primero cates el package.json. Luego, jqobtiene el grupo de dependencia requerido. ( {} +está ahí para que no arroje un error si, por ejemplo, no hay dependencias de pares en el archivo).
Después de eso, sedextrae las partes entre las comillas, el nombre del paquete. -ny .../ple dice que imprima las partes coincidentes y nada más de jqla salida JSON de. Luego leemos esta lista de nombres de paquetes en un whilebucle.
RESes el número de apariciones del nombre del paquete entre comillas. En este momento es import/ require... 'package'/ "package". Hace el trabajo para la mayoría de los casos.
Luego simplemente contamos el número de líneas de resultado y luego imprimimos el resultado.
Advertencias:
- No encontrará archivos en diferentes importaciones, por ejemplo,
tsconfig.jsonarchivos ( libopción)
- Usted tiene que
grepmanualmente por sólo ^USEDy UNUSEDarchivos.
- Es lento para proyectos grandes: los scripts de shell a menudo no se escalan bien. Pero espero que no corras tantas veces.