¿Hay alguna manera de desinstalar simplemente todas las dependencias no utilizadas (no declaradas) de un proyecto Node.js (las que ya no están definidas en mi package.json
). Cuando actualizo mi aplicación, me gusta que los paquetes no referenciados se eliminen automáticamente.
414
node_modules
cuando se eliminan de las respectivaspackage.json
?Respuestas:
Nota : Las
npm
versiones recientes hacen esto automáticamente cuando los bloqueos de paquetes están habilitados, por lo que esto no es necesario, excepto para eliminar paquetes de desarrollo con el--production
indicador.Ejecute
npm prune
para eliminar los módulos que no figuran enpackage.json
.De
npm help prune
:fuente
package.json
. ¿Está bien? Entonces, la próxima actualización o instalación tendría que reinstalarlos.node_modules
directorio del módulo , por lo que se eliminan con el módulo.package.json
, pero dejo la glorieta. Cuando corronpm prune
, esperonode_modules
que se elimine todo el karma, incluida su propia carpeta que contiene sus dependencias. ¿Qué pasa con las dependencias de bower (bower-json, bower-logger, chmodr, fstream, glob, et al.). Técnicamente, esos no figuran en mi proyectopackage.json
. ¿Se han eliminado o no?node_modules
, pero en el interiornode_modules/bower/node_modules
, "protegidos" pornode_modules/bower/package.json
. Las dependencias de su paquete y las de las dependencias de su paquete no son mixtas .Si no está preocupado por un par de minutos para hacerlo, una solución sería reconstruir los módulos locales una
rm -rf node_modules
ynpm install
otra vez.fuente
node_modules
también verifica que elpackage.json
archivo describa un gráfico de dependencia reproducible. Eliminar y volver a instalar sunode_modules
es básicamente una prueba de implementación.npm prune
no ayudó ni un ápice, pero esto sí. Mi problema fue un enlace simbólico roto.Puede usar npm-prune para eliminar paquetes extraños.
Este comando elimina paquetes "extraños". Si se proporciona un nombre de paquete, solo se eliminan los paquetes que coinciden con uno de los nombres proporcionados.
Los paquetes extraños son paquetes que no figuran en la lista de dependencias del paquete principal.
Si el --production se especifica la bandera o NODE_ENV variable de entorno se establece en la producción , este comando eliminará los paquetes especificados en sus devDependencies . Configuración --no-producción negará NODE_ENV se establece en la producción .
Si se usa el indicador --dry-run , no se realizarán cambios.
Si se usa la bandera --json , los cambios realizados por npm prune (o que se habrían hecho con --dry-run ) se imprimen como un objeto JSON.
En funcionamiento normal con bloqueos de paquete habilitados, los módulos extraños se podan automáticamente cuando se instalan módulos y solo necesitará este comando con el indicador --production .
Si ha deshabilitado los bloqueos de paquetes, los módulos extraños no se eliminarán y depende de usted ejecutar npm prune de vez en cuando para eliminarlos.
Use npm-dedupe para reducir la duplicación
Busca en el árbol de paquetes local e intenta simplificar la estructura general moviendo las dependencias más arriba del árbol, donde pueden ser compartidas de manera más efectiva por múltiples paquetes dependientes.
Por ejemplo, considere este gráfico de dependencia:
En este caso, npm-dedupe transformará el árbol en:
Debido a la naturaleza jerárquica de la búsqueda de módulos del nodo, byd obtendrán su dependencia con el paquete c único en el nivel raíz del árbol.
El algoritmo de deduplicación recorre el árbol, moviendo cada dependencia lo más arriba posible en el árbol, incluso si no se encuentran duplicados. Esto dará como resultado un árbol plano y deduplicado.
fuente