Node Package Manager a été corrompu d'une manière ou d'une autre, maintenant il ne peut pas être installé

13

J'ai rencontré un problème aujourd'hui lorsque j'ai décidé de l'utiliser npm update -gdans un répertoire d'application nodejs. Ce fut une mauvaise décision, car cela m'a fait rencontrer un problème commun et désastreux avec npm .

La solution consiste à réinstaller nodejs et npm. Malheureusement, quand je vais installer npm, sudo apt-get install npmcela ne fonctionne pas.

L'erreur complète dans le terminal est ici:

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.

Que puis-je faire pour que npm soit correctement installé et exécuté à nouveau?

Merci.

Zach Cook
la source

Réponses:

29

Mise à jour

En ce qui concerne le commentaire de William Entriken sous cette réponse, il existe une meilleure façon d'installer Node.js en mode natif dans Ubuntu en tant que package instantané.

Node.js est disponible en tant que package instantané dans toutes les versions actuellement prises en charge d'Ubuntu. Spécifiques à Node.js, les développeurs peuvent choisir parmi une ou plusieurs des versions actuellement prises en charge et obtenir des mises à jour automatiques régulières directement à partir de NodeSource. Les versions 6, 8, 9, 10, 11, 12 et 13 de Node.js sont actuellement disponibles, le Snap Store étant mis à jour quelques heures ou minutes après la sortie de Node.js.

Le nœud peut être installé avec une seule commande, par exemple:

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

Le snap de nœud est accessible par la commande node, par exemple:

$ node -v  
v9.9.0

Une version à jour de npm sera installée dans le cadre de l'accrochage au nœud. npm doit être exécuté en dehors du nœud repl, dans votre shell normal. Après avoir installé le nœud snap, exécutez la commande suivante pour activer la vérification de la mise à jour npm:

sudo chown -R $ USER: $ (id -gn $ USER) / home / votre-nom d'utilisateur /.config

Remplacez your-usernamela commande ci-dessus par votre propre nom d'utilisateur. Ensuite, exécutez npm -vpour vérifier si la version de npm est à jour. Par exemple, j'ai vérifié que npm était à jour, vérifié la version d'un package déjà installé nommé yarn avec la commande npm list yarn, puis mis à jour le package de fil existant vers la dernière version avec la commandenpm update yarn

Les utilisateurs peuvent basculer entre les versions de Node.js à tout moment sans avoir besoin d'impliquer des outils supplémentaires comme nvm (Node Version Manager), par exemple:

sudo snap refresh node --channel=8/stable

Les utilisateurs peuvent tester les versions de pointe de Node.js qui peuvent être installées à partir du dernier canal de périphérie qui suit actuellement Node.js version 12 en basculant avec:

sudo snap switch node --edge

Cette approche n'est recommandée que pour les utilisateurs qui souhaitent participer aux tests et aux rapports de bogues en amont.


Réponse originale

Pour installer les dernières versions LTS de Node.js (nodejs) et du gestionnaire de packages pour Node.js (npm) dans toutes les versions actuellement prises en charge d'Ubuntu, ouvrez le terminal et exécutez les commandes suivantes:

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 vous copiez ces trois commandes, ne négligez pas le trait d'union à la fin de la deuxième commande.

Le nodejspackage contient le nodejsbinaire ainsi que npm, vous n'avez donc pas besoin d'installer npmséparément. Cependant, pour que certains npmpackages fonctionnent (tels que ceux qui nécessitent une construction à partir des sources), vous devrez installer le build-essentialpackage:

sudo apt-get install build-essential  

Plan LTS

Les nouvelles versions semi-majeures de Node.js sont supprimées mastertous les six mois. Les nouvelles versions paires (par exemple v6, v8, v10, etc.) seront supprimées en avril. Les nouvelles versions impaires (par exemple v5, v7, v9) seront supprimées en octobre.

Lorsqu'une nouvelle version majeure impaire est supprimée, la précédente version majeure numérotée paire passe au plan de support à long terme.

Chaque version majeure couverte par le plan LTS sera activement maintenue pendant une période de 18 mois à compter de la date à laquelle elle entre dans la couverture LTS. Après ces 18 mois de support actif, la version majeure passera en mode "maintenance" pendant 12 mois supplémentaires.

installation non LTS

En date de mars 2017, les commandes pour installer la dernière version non LTS de Node.js (v8 au moment de sa publication) sont les suivantes:

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 Nom de code LTS Start Maintenance Start Maintenance End
6.x Bore actif 2016-10-18 avril 2018 avril 2019
7.x Pas de LTS              
8.x Active Carbon 2017-10-31 avril 2019 décembre 2019
9.x Pas de LTS              
10.x Dubnium actif octobre 2018 avril 2020 avril 2021  
11.x Non LTS 2019-04-01 2019-06-30
12.x 2019-10-22 2021-04-01 2022-04-01
13.x Non LTS 2020-04-20 2020-06-01
Karel
la source
utiliser "sudo apt-get install -y nodejs" a fonctionné pour moi
Davinder Kumar
Cette méthode nécessite de faire confiance à BEAUCOUP de parties, puis de donner un accès complet à votre ordinateur à deb.nodesource.com, une entité qui ne peut même pas être gênée de mettre à jour son site Web chaque version pour inclure le hachage de contenu pour votre sécurité. Non merci!
William Entriken
@WilliamEntriken Node.js est maintenant un package snap dans Ubuntu qui ne nécessite pas d'exécuter la curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash -commande. Au lieu de cela, Node.js peut être installé en tant que package snap. J'ai ajouté une nouvelle section de mise à jour à ma réponse qui contient les instructions pour installer le package snap Node.js.
karel