Node Package Manager se corrompió de alguna manera, ahora no se puede instalar

13

Me encontré con un problema hoy cuando decidí usarlo npm update -gen un directorio de aplicaciones de nodejs. Esta fue una mala decisión, porque me hizo encontrar un problema común y desastroso con npm .

La solución es reinstalar nodejs y npm. Desafortunadamente cuando voy a instalar npm usando sudo apt-get install npmno funciona.

El error completo en la terminal está aquí:

Some packages could not be installed. This may mean that you have requested
an impossible situation or if you are using the unstable distribution that 
some required packages have not yet been created or been moved out of Incoming.
The following information may help to resolve the situation:
The following packages have unmet dependencies:
 npm : Depends: nodejs but it is not going to be installed
   Depends: node-abbrev (>= 1.0.4) but it is not going to be installed
   Depends: node-ansi but it is not going to be installed
   Depends: node-archy but it is not going to be installed
   Depends: node-block-stream but it is not going to be installed
   Depends: node-fstream (>= 0.1.22) but it is not going to be installed
   Depends: node-fstream-ignore but it is not going to be installed
   Depends: node-github-url-from-git but it is not going to be installed
   Depends: node-glob (>= 3.1.21) but it is not going to be installed
   Depends: node-graceful-fs (>= 2.0.0) but it is not going to be installed
   Depends: node-inherits but it is not going to be installed
   Depends: node-ini (>= 1.1.0) but it is not going to be installed
   Depends: node-lockfile but it is not going to be installed
   Depends: node-lru-cache (>= 2.3.0) but it is not going to be installed
   Depends: node-minimatch (>= 0.2.11) but it is not going to be installed
   Depends: node-mkdirp (>= 0.3.3) but it is not going to be installed
   Depends: node-gyp (>= 0.10.9) but it is not going to be installed
   Depends: node-nopt (>= 2.1.1) but it is not going to be installed
   Depends: node-npmlog but it is not going to be installed
   Depends: node-once but it is not going to be installed
   Depends: node-osenv but it is not going to be installed
   Depends: node-read but it is not going to be installed
   Depends: node-read-package-json (>= 1.1.0) but it is not going to be installed
   Depends: node-request (>= 2.25.0) but it is not going to be installed
   Depends: node-retry but it is not going to be installed
   Depends: node-rimraf (>= 2.2.2) but it is not going to be installed
   Depends: node-semver (>= 2.1.0) but it is not going to be installed
   Depends: node-sha but it is not going to be installed
   Depends: node-slide but it is not going to be installed
   Depends: node-tar (>= 0.1.18) but it is not going to be installed
   Depends: node-which but it is not going to be installed
E: Unable to correct problems, you have held broken packages.

¿Qué puedo hacer para que npm se instale correctamente y vuelva a funcionar?

Gracias.

Zach Cook
fuente

Respuestas:

29

Actualizar

Con respecto al comentario de William Entriken debajo de esta respuesta, hay una mejor manera de instalar Node.js de forma nativa en Ubuntu como un paquete instantáneo.

Node.js está disponible como un paquete instantáneo en todas las versiones actualmente compatibles de Ubuntu. Específicos para Node.js, los desarrolladores pueden elegir entre una o más de las versiones compatibles actualmente y obtener actualizaciones automáticas periódicas directamente de NodeSource. Las versiones 6, 8, 9, 10, 11, 12 y 13 de Node.js están actualmente disponibles, y Snap Store se actualiza a las pocas horas o minutos de un lanzamiento de Node.js.

El nodo se puede instalar con un solo comando, por ejemplo:

sudo snap install node --classic --channel 9/stable 

El comando puede acceder al complemento de nodo node, por ejemplo:

$ nodo -v  
v9.9.0

Se instalará una versión actualizada de npm como parte del complemento de nodo. npm debe ejecutarse fuera del nodo repl, en su shell normal. Después de instalar el nodo snap, ejecute el siguiente comando para habilitar la comprobación de actualizaciones npm:

sudo chown -R $ USER: $ (id -gn $ USER) / home / your-username /.config

Reemplace your-usernameen el comando anterior con su propio nombre de usuario. Luego, ejecute npm -vpara verificar si la versión de npm está actualizada. Como ejemplo, verifiqué que npm estaba actualizado, verifiqué la versión de un paquete ya instalado llamado hilo con el comando npm list yarny luego actualicé el paquete de hilo existente a la última versión con el comandonpm update yarn

Los usuarios pueden cambiar entre versiones de Node.js en cualquier momento sin necesidad de involucrar herramientas adicionales como nvm (Node Version Manager), por ejemplo:

sudo snap refresh node --channel=8/stable

Los usuarios pueden probar versiones avanzadas de Node.js que se pueden instalar desde el último canal de borde que actualmente está rastreando la versión 12 de Node.js cambiando con:

sudo snap switch node --edge

Este enfoque solo se recomienda para aquellos usuarios que estén dispuestos a participar en pruebas e informes de errores en sentido ascendente.


Respuesta original

Para instalar las últimas versiones LTS de Node.js (nodejs) y Package Manager para Node.js (npm) en todas las versiones actualmente compatibles de Ubuntu, abra el terminal y ejecute los siguientes comandos:

sudo apt-get remove nodejs npm ## remove existing nodejs and npm packages
sudo apt-get install curl  
curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash -
sudo apt-get install -y nodejs  

Si está copiando estos tres comandos, no descuide el guión al final del segundo comando.

El nodejspaquete también contiene el nodejsbinario npm, por lo que no necesita instalarlo por npmseparado. Sin embargo, para que algunos npmpaquetes funcionen (como los que requieren compilación desde el origen), deberá instalar el build-essentialpaquete:

sudo apt-get install build-essential  

Plan LTS

Las nuevas versiones de Node.js semestrales se eliminan mastercada seis meses. Las nuevas versiones pares (por ejemplo, v6, v8, v10, etc.) se cortan en abril. Las nuevas versiones impares (por ejemplo, v5, v7, v9) se cortan en octubre.

Cuando se corta una nueva versión principal con números impares, la versión principal anterior con números pares pasa al plan de soporte a largo plazo.

Todas las versiones principales cubiertas por el plan LTS se mantendrán activamente durante un período de 18 meses a partir de la fecha en que ingrese a la cobertura LTS. Después de esos 18 meses de soporte activo, la versión principal pasará al modo "mantenimiento" durante 12 meses adicionales.

instalación no LTS

A partir de marzo de 2017, los comandos para instalar la última versión no No LTS de Node.js (v8 en el momento en que se publicó) son los siguientes:

sudo apt-get remove nodejs npm ## remove existing nodejs and npm packages
sudo apt-get install curl  
curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
sudo apt-get install -y nodejs  

Node.js LTS Schedule

Release LTS Status Codename LTS Start Maintenance Start Maintenance End
6.x Boro activo 2016-10-18 abril 2018 abril 2019
7.x Sin LTS              
8.x Active Carbon 2017-10-31 abril 2019 diciembre 2019
9.x Sin LTS              
10.x Dubnium activo Octubre 2018 Abril 2020 Abril 2021  
11.x No LTS 2019-04-01 2019-06-30
12.x 2019-10-22 2021-04-01 2022-04-01
13.x No LTS 2020-04-20 2020-06-01
karel
fuente
usar "sudo apt-get install -y nodejs" funcionó para mí
Davinder Kumar
Este método requiere confiar en MUCHAS partes y luego dar acceso completo a su computadora a deb.nodesource.com, una entidad que ni siquiera puede molestarse en actualizar su sitio web en cada versión para incluir el hash de contenido para su seguridad. ¡No, gracias!
William Entriken
@WilliamEntriken Node.js ahora es un paquete instantáneo en Ubuntu que no requiere ejecutar el curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash -comando. En su lugar, Node.js se puede instalar como un paquete instantáneo. Agregué una nueva sección de Actualización a mi respuesta que contiene las instrucciones para instalar el paquete Snap Node.js.
karel