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 depcheck
no funciona correctamente! (Por ejemplo, lo probé con Typecript y me dio errores de análisis innecesarios)
Para analizar package.json
podemos 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 find
comando. La primera y segunda línea hacen que ignore las carpetas node_modules
y 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 cat
es el package.json
. Luego, jq
obtiene 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, sed
extrae las partes entre las comillas, el nombre del paquete. -n
y .../p
le dice que imprima las partes coincidentes y nada más de jq
la salida JSON de. Luego leemos esta lista de nombres de paquetes en un while
bucle.
RES
es 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.json
archivos ( lib
opción)
- Usted tiene que
grep
manualmente por sólo ^USED
y UNUSED
archivos.
- Es lento para proyectos grandes: los scripts de shell a menudo no se escalan bien. Pero espero que no corras tantas veces.