¿Hay alguna manera de determinar si tiene paquetes en su archivo package.json que ya no son necesarios?
Por ejemplo, al probar un paquete y luego comentar o eliminar código, pero olvidando desinstalarlo, termino con un par de paquetes que podrían eliminarse.
¿Cuál sería una manera eficiente de determinar si un paquete podría eliminarse de manera segura?
node.js
dependencies
npm
Josh C
fuente
fuente

depcheckcada paquete comounusedincorrectonpx depcheckTambién hay un paquete llamado
npm-check:Es bastante poderoso y desarrollado activamente. Una de sus características es la comprobación de dependencias no utilizadas: para esta parte, utiliza el
depcheckmódulo mencionado en la otra respuesta.fuente
npm outdatedcomprueba y enumera las versiones actuales, deseadas y más recientes del paquete. Sin embargo, no hay una lista de paquetes no utilizados.Si está utilizando un Unix como SO (Linux, OSX, etc.), entonces puede usar una combinación de
findyegreppara buscar declaraciones de requerimiento que contengan el nombre de su paquete:Si busca la
require('name-of-package')declaración completa , recuerde utilizar el tipo correcto de comillas:o
La desventaja es que no es completamente automático, es decir, no extrae los nombres de los paquetes
package.jsonni los verifica. Necesita hacer esto para cada paquete usted mismo. Dado quepackage.jsones solo JSON, esto podría remediarse escribiendo un pequeño script que usechild_process.execpara ejecutar este comando para cada dependencia. Y que sea un módulo. Y agréguelo al repositorio de NPM ...fuente
.jsxarchivos y.tsarchivos, etc .: Dfiskeben escribió:
¡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 softwarejq. El siguiente script de shell requiere un nombre de directorio donde comenzar.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 carpetasnode_modulesybuild(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 elpackage.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 dejqla salida JSON de. Luego leemos esta lista de nombres de paquetes en unwhilebucle.RESes el número de apariciones del nombre del paquete entre comillas. En este momento esimport/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:
tsconfig.jsonarchivos (libopción)grepmanualmente por sólo^USEDyUNUSEDarchivos.fuente
Podemos usar el siguiente módulo npm para este propósito:
https://www.npmjs.com/package/npm-check-unused
fuente
Muchas de las respuestas aquí son cómo encontrar elementos no utilizados.
Quería eliminarlos automáticamente .
Instale este proyecto de nodo.
$ npm install -g typescript tslint tslint-etcEn el directorio raíz, agregue un nuevo archivo tslint-imports.json
{ "extends": [ "tslint-etc" ], "rules": { "no-unused-declaration": true } }Ejecute esto bajo su propio riesgo, haga una copia de seguridad :)
$ tslint --config tslint-imports.json --fix --project .fuente
npx depcheck --json | jq '.dependencies[]' | xargs -L1 npm rm