Der Knotenpaket-Manager wurde in irgendeiner Weise beschädigt. Jetzt kann er nicht mehr installiert werden

13

Ich bin heute auf ein Problem npm update -ggestoßen, als ich mich für die Verwendung in einem nodejs-App-Verzeichnis entschieden habe. Dies war eine schlechte Entscheidung, da ich mit npm auf ein allgemeines und katastrophales Problem gestoßen bin .

Die Lösung besteht darin, nodejs und npm neu zu installieren. Leider sudo apt-get install npmfunktioniert es nicht, wenn ich npm mit installiere .

Der vollständige Fehler im Terminal ist hier:

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.

Was kann ich tun, um npm ordnungsgemäß zu installieren und erneut auszuführen?

Vielen Dank.

Zach Cook
quelle

Antworten:

29

Aktualisieren

In Bezug auf den Kommentar von William Entriken unter dieser Antwort gibt es eine bessere Möglichkeit, Node.js nativ in Ubuntu als Snap-Paket zu installieren.

Node.js ist als Snap-Paket in allen derzeit unterstützten Versionen von Ubuntu verfügbar. Speziell für Node.js können Entwickler aus einer oder mehreren der derzeit unterstützten Versionen auswählen und regelmäßige automatische Updates direkt von NodeSource erhalten. Derzeit sind die Node.js-Versionen 6, 8, 9, 10, 11, 12 und 13 verfügbar. Der Snap Store wird innerhalb von Stunden oder Minuten nach der Veröffentlichung von Node.js aktualisiert.

Der Knoten kann mit einem einzigen Befehl installiert werden, zum Beispiel:

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

Auf den Knotenfang kann mit dem Befehl zugegriffen werden node, zum Beispiel:

$ node -v  
v9.9.0

Eine aktuelle Version von npm wird als Teil des Node-Snaps installiert. npm sollte außerhalb des Node Repl in Ihrer normalen Shell ausgeführt werden. Führen Sie nach der Installation des Node-Snaps den folgenden Befehl aus, um die Überprüfung auf npm-Updates zu aktivieren:

sudo chown -R $ USER: $ (ID -gn $ USER) / home / Ihr-Benutzername /.config

Ersetzen Sie your-usernameim obigen Befehl durch Ihren eigenen Benutzernamen. Führen npm -vSie dann den Befehl aus, um zu überprüfen, ob die Version von npm aktuell ist. Als Beispiel habe ich überprüft, ob npm auf dem neuesten Stand ist, die Version eines bereits installierten Pakets mit dem Namen yarn mit dem Befehl überprüft npm list yarnund dann das vorhandene Garnpaket mit dem Befehl auf die neueste Version aktualisiertnpm update yarn

Benutzer können jederzeit zwischen den Versionen von Node.js wechseln, ohne dass zusätzliche Tools wie nvm (Node Version Manager) erforderlich sind. Beispiel:

sudo snap refresh node --channel=8/stable

Benutzer können aktuelle Versionen von Node.js testen, die über den neuesten Edge-Kanal installiert werden können, der derzeit Node.js Version 12 verfolgt, indem sie zwischen den folgenden Optionen wechseln:

sudo snap switch node --edge

Dieser Ansatz wird nur Benutzern empfohlen, die bereit sind, an Tests und Fehlerberichten vorab teilzunehmen.


Ursprüngliche Antwort

Um die neuesten LTS-Versionen von Node.js (nodejs) und Package Manager for Node.js (npm) in allen derzeit unterstützten Versionen von Ubuntu zu installieren, öffnen Sie das Terminal und führen Sie die folgenden Befehle aus:

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  

Wenn Sie diese drei Befehle kopieren, dürfen Sie den Bindestrich am Ende des zweiten Befehls nicht vernachlässigen.

Das nodejsPaket enthält auch die nodejsBinärdatei und npmmuss daher nicht npmseparat installiert werden. Damit jedoch einige npmPakete funktionieren (z. B. solche, für die eine Erstellung aus dem Quellcode erforderlich ist), müssen Sie das build-essentialPaket installieren :

sudo apt-get install build-essential  

LTS-Plan

Neue Semver-Major-Releases von Node.js werden masteralle sechs Monate gekürzt . Neue Versionen mit geraden Nummern (z. B. v6, v8, v10 usw.) werden im April geschnitten. Neue ungerade Versionen (zB v5, v7, v9) werden im Oktober geschnitten.

Wenn eine neue Hauptversion mit ungeraden Nummern entfernt wird, wechselt die vorherige Hauptversion mit geraden Nummern zum langfristigen Support-Plan.

Jede Hauptversion, die vom LTS-Plan abgedeckt wird, wird ab dem Datum des Eintritts in die LTS-Abdeckung für einen Zeitraum von 18 Monaten aktiv gewartet. Nach diesen 18 Monaten aktiven Supports wechselt die Hauptversion für weitere 12 Monate in den Wartungsmodus.

Nicht-LTS-Installation

Aktuell bis März 2017 lauten die Befehle zum Installieren der neuesten Nicht-LTS-Version von Node.js (Version 8 zum Zeitpunkt der Veröffentlichung) wie folgt:

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-Zeitplan

Release LTS Status Codename LTS Start Wartung Start Wartung Ende
6.x Active Boron 2016-10-18 April 2018 April 2019
7.x Kein LTS              
8.x Aktivkohle 2017-10-31 April 2019 Dezember 2019
9.x Kein LTS              
10.x Active Dubnium Oktober 2018 April 2020 April 2021  
11.x Nr. LTS 2019-04-01 2019-06-30
12.x 22.10.2019 2021-04-01 2022-04-01
13.x Nr. LTS 2020-04-20 2020-06-01
karel
quelle
Die Verwendung von "sudo apt-get install -y nodejs" funktionierte für mich
Davinder Kumar
Diese Methode erfordert, dass Sie VIELEN Parteien vertrauen und dann deb.nodesource.com, einer Instanz, die nicht einmal die Mühe macht, ihre Website in jeder Version zu aktualisieren, um den Inhalts-Hash für Ihre Sicherheit einzuschließen, den vollständigen Zugriff auf Ihren Computer gewähren. Nein Danke!
William Entriken
@WilliamEntriken Node.js ist jetzt ein Snap-Paket in Ubuntu, für das der curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash -Befehl nicht ausgeführt werden muss. Stattdessen kann Node.js als Snap-Paket installiert werden. Ich habe meiner Antwort einen neuen Update- Abschnitt hinzugefügt , der die Anweisungen zum Installieren des Snap-Pakets Node.js enthält.
Karl