¿Cómo desinstalas todas las dependencias enumeradas en package.json (NPM)?


107

Si tengo un archivo package.json definido en la raíz de mi aplicación y lo ejecuto npm install -g, se instalarán todas las dependencias definidas en package.json, globalmente.

Sin embargo, esto no parece funcionar a la inversa.

Si lo hago npm uninstall -gen la raíz de mi aplicación, arroja un error, explicándome que le pase un nombre de paquete.

¿No debería esto desinstalar también los mismos paquetes que instalé?

¿Estoy haciendo algo mal?


1
Para su información, mi razonamiento detrás de nunca usar npm -g. peterlyons.com/problog/2012/09/…
Peter Lyons

1
Recuerde que si desea utilizar un módulo para su proyecto, debe instalarlo localmente. Instalar un módulo globalmente solo proporciona más comandos en su terminal, como con expressjs y express (1) por ejemplo.
warchimede

@sgwilly Te equivocas al tener que usar node_modules globalmente, incluso lo dice en la documentación - nodejs.org/api/modules.html#modules_all_together - la función require () es 'inteligente' porque se ve en varias ubicaciones para intentar resolver una ruta para un módulo que incluye los módulos node_modules globales
qodeninja

Debería haber sido más específico: es cierto que require () es lo suficientemente inteligente como para encontrar su módulo instalado globalmente. Funcionará si todos sus proyectos dependen de la misma versión de dicho módulo. Sin embargo, es posible que tenga dificultades para mantener proyectos que se basan en diferentes versiones de módulos si solo administra las dependencias de manera global. Es por eso que es una buena práctica instalar siempre módulos localmente y solo instalarlos globalmente cuando desee obtener acceso a algunos comandos ejecutables útiles.
warchimede

@sgwilly - gracias por compartir sus pensamientos aquí - este proyecto en particular es distribuible, por lo que no debería intentar actualizar nada - las actualizaciones en realidad ocurrirán a través de RPM (tenga en cuenta RPM, no NPM) y los node_modules reales están reducidos - Solo necesitaba una forma de limpiar rápidamente el sistema de lo que sea que las rpm
terminen

Respuestas:


168

Si usa Bash, simplemente cambie a la carpeta que tiene su archivo package.json y ejecute lo siguiente:

for package in `ls node_modules`; do npm uninstall $package; done;

En el caso de paquetes instalados globalmente, cambie a su %appdata%/npmcarpeta (si está en Windows) y ejecute el mismo comando.

EDITAR: Este comando rompe con npm 3.3.6 (Nodo 5.0). Ahora estoy usando el siguiente comando Bash, que he asignado a npm_uninstall_all en mi archivo .bashrc:

npm uninstall `ls -1 node_modules | tr '/\n' ' '`

¿Bono agregado? ¡es mucho más rápido!

https://github.com/npm/npm/issues/10187


1
Publicó exactamente el mismo comando como respuesta a "¿Comando para eliminar todos los módulos npm globalmente?". ¿Cómo puede ser esto lo apropiado para hacer tanto en esa situación como en esta?
nadie

@AndrewMedico ¿Cómo no es apropiado? Los paquetes instalados en su archivo package.json se instalarán en su carpeta node_modules. Este comando llevará cada subcarpeta a la carpeta node_modules y se ejecutará npm uninstall <package>para cada carpeta. ¡Hice esto yo mismo y funciona excelentemente!
jedmao

2
@UgoRobain buena pregunta. Resulta que algunas dependencias se vuelven realmente profundas. En el sistema de archivos NTFS (Windows), al menos, tiene problemas para eliminar directorios donde el nombre de la ruta es más largo que algún tipo de límite, dejando estos directorios fantasmas que no puede eliminar. Afortunadamente, npm uninstallse encarga de eso, razón por la cual este truco es útil.
Jedmao

7
Esto es lo que solía hacer con powershell:foreach($package in ls node_modules){npm uninstall $package}
JustMaier

1
no parece funcionar en Windows. tr is not recognized
Overdrivr

78

Esto funcionó para mí:

símbolo del sistema o gitbash en la carpeta node_modules en su proyecto y luego ejecute:

npm uninstall *

Se eliminaron todos los paquetes locales para ese proyecto.


¿No elimina esto también las instalaciones globales?
shinzou

@shinzou No eliminó las instalaciones globales para mí.
Taylor Edmiston

1
En Mac 10.13.5, esto arroja muchos errores como se muestra a continuación "> heapdump@0.3.9 install / Users / vikramanna / node_modules / heapdump> node-gyp rebuild CXX (target) Release / obj.target / addon / src / heapdump. o En el archivo incluido de ../src/heapdump.cc:17: ../src/compat-inl.h:300:19: error: ningún miembro llamado 'GetCpuProfiler' en 'v8 :: Isolate' return isolate-> GetCpuProfiler () -> StartProfiling (título, record_samples); "
vikramvi

35

Para Windows, vaya al directorio node_modules y ejecute esto en powershell

npm uninstall (Get-ChildItem).Name 

Para mí, esto da como resultado el error "La línea de comando es demasiado larga".
Daniel

29

Recientemente encontré un comando de nodo que permite desinstalar todas las dependencias de desarrollo de la siguiente manera:

npm prune --production

Como mencioné, este comando solo desinstala los paquetes de dependencia de desarrollo. Al menos me ayudó a no tener que hacerlo manualmente.


8

Sugerencia para usuarios de Windows: Ejecute este comando de PowerShell desde el node_modulesdirectorio principal:

ls .\node_modules | % {npm uninstall $_}

6
// forcibly remove and reinstall all package dependencies
ren package.json package.json-bak
echo {} > package.json
npm prune
del package.json
ren package.json-bak package.json
npm i

Esto esencialmente crea un package.json falso y vacío, llama npm prunepara eliminar todo en node_modules, restaura el package.json original y reinstala todo.

Algunas de las otras soluciones pueden ser más elegantes, pero sospecho que esto es más rápido y exhaustivo. En otros hilos, he visto personas sugerir simplemente eliminar el directorio node_modules, pero al menos para Windows, esto hace que npm se ahogue después porque el directorio bin desaparece. Tal vez en Linux se restaure correctamente, pero no en Windows.


1
En mi caso, no necesitaba el package.json existente (debido a que ejecuté el script en CI después de que se ejecutaron los scripts npm ..) Así que simplemente fui con: "echo {}> package.json & npm prune"
Rikki

5

En realidad, no hay ninguna opción para hacer eso, si desea desinstalar paquetes, package.jsonsimplemente hágalo npm lsen el mismo directorio que se package.jsonbasa y usa npm uninstall <name>o npm rm <name>para el paquete que desea eliminar.


8
Sé cómo eliminarlos individualmente; tendría más sentido si hubiera un comando que se ejecutara en el archivo package.json de la misma manera que funciona la instalación npm.
qodeninja

No, no queremos desinstalar a mano todos los módulos.
shinzou

1
  1. eliminar las dependencias no deseadas de package.json
  2. npm i

" npm i" no solo instalará los deps que faltan, sino que también actualizará node_modules para que coincida con el package.json


1

( No repita estos pasos hasta que haya leído todo )

Para mí, todas las soluciones mencionadas no funcionaron. Así que fui /usr/liby corrí allí

for package in `ls node_modules`; do sudo npm uninstall $package; done;

Pero también eliminó el npmpaquete y solo la mitad de los paquetes (hasta que llegó a la letra n).

Así que intenté instalar el nodo nuevamente con la guía del nodo.

# Using Ubuntu
curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -
sudo apt-get install -y nodejs

Pero no se instaló de npmnuevo.

Así que decidí reinstalar todo el nodo sudo apt-get remove nodejs y volver a instalarlo según la guía anterior.

Ahora NPM está funcionando nuevamente, pero los módulos globales todavía están allí. Así que verifiqué el contenido del directorio /usr/lib/node_modulesy parece que lo único importante aquí es npm. Así que edité el comando anterior para desinstalar todo exceptonpm

for package in $(ls node_modules); do if [ "$package" != "npm" ]; then sudo npm uninstall $package; fi; done;

Eliminó todos los módulos que no tenían prefijos @. Entonces extendí el ciclo para subdirectorios.

for package in $(ls node_modules); do if [  ${package:0:1} = \@ ]; then 
        for innerPackage in $(ls node_modules/${package}); do
                sudo npm uninstall "$package/$innerPackage";
        done;
fi; done;

Mi /usr/lib/node_modulesahora contiene solo npmpaquetes vinculados.


0

Incluso no es necesario ejecutar el ciclo para eso.

Puede eliminar todos los node_modules usando el único comando: -

npm uninstall `ls -1 node_modules | tr '/\n' ' '`

0

Usuarios de Powershell: foreach($package in ls node_modules){npm uninstall $package}

Gracias @JustMailer


0

A cuestas de VIKAS KOHLI y jedmao , puedes hacer esto

versión de una sola línea:

npm uninstall `ls -1 node_modules | grep -v ^@ | tr '/\n' ' '` `find node_modules/@* -type d -depth 1 2>/dev/null | cut -d/ -f2-3 | tr '\n' ' '`

versión de varias líneas:

npm uninstall \
`ls -1 node_modules | grep -v ^@ | tr '/\n' ' '` \
`find node_modules/@* -type d -depth 1 2>/dev/null | cut -d/ -f2-3 | tr '\n' ' '`

0

Otra opción SIMPLE es eliminar node_modules y package-lock.json

rm -rf node_modules
rm -rf package-lock.json

Después de esto, puede intentar reinstalar los paquetes npm

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.