525 Stimmen

Kann keine Pakete mit dem Node Package Manager in Ubuntu installieren

Der NodeJS-Interpreter-Name(node) auf Ubuntu wurde aufgrund eines Namenskonflikts mit einem anderen Paket in nodejs umbenannt. Hier ist, was in der Readme-Datei von Debian steht:

Der ursprüngliche Name für den Node.js-Interpreter-Befehl lautet "node". In Debian wurde der Interpreter-Befehl in "nodejs" geändert.

Dies wurde durchgeführt, um Kollisionen mit Namensräumen zu verhindern: Andere Befehle verwenden im Ursprung denselben Namen, wie z.B. ax25-node aus dem Paket "node".

Skripte, die Node.js als Shell-Befehl aufrufen, müssen stattdessen den Befehl "nodejs" verwenden.

Die Verwendung von nodejs führt jedoch dazu, dass bei der Installation von Paketen mit npm Fehler auftreten. Die Paketinstallation schlägt mit dem folgenden Fehler fehl:

sh: 1: node: not found
npm WARN Dieses Problem könnte auf die Verwendung des veralteten Binärformats "node" zurückzuführen sein
npm WARN Weitere Erklärungen finden Sie unter /usr/share/doc/nodejs/README.Debian

Wie kann ich npm dazu bringen zu verstehen, dass nodejs bereits auf dem System installiert ist, der Interpreter-Name jedoch anders ist?

1111voto

vbo Punkte 13563

TL;DR:

sudo apt-get install nodejs-legacy

Zunächst einmal möchte ich die Situation etwas klarstellen. Im Sommer 2012 entschieden sich die Debian-Wartungspersonen, das Node.js-Ausführbare umzubenennen, um eine Art Namensraumkonflikt mit einem anderen Paket zu verhindern. Es war eine sehr schwierige Entscheidung für das Debian Technical Committee, da sie die Abwärtskompatibilität bricht.

Folgendes ist ein Zitat aus dem Entwurf der Kommissionsresolution, veröffentlicht in der Debian-Mailingliste:

  1. Das Nodejs-Paket soll geändert werden, um /usr/bin/nodejs bereitzustellen, nicht /usr/bin/node. Das Paket sollte eine Beziehung zu "Breaks:" mit allen Paketen in Debian deklarieren, die auf /usr/bin/node verweisen.

  2. Das Nodejs-Quellpaket soll auch ein Binary-Paket nodejs-legacy mit Priorität: extra bereitstellen, das /usr/bin/node als Symlink zu /usr/bin/nodejs enthält. Kein Paket im Archiv darf vom nodejs-legacy-Paket abhängen oder dieses empfehlen, das ausschließlich für die Upstream-Kompatibilität bereitgestellt wird. Dieses Paket deklariert auch eine Beziehung zu "Conflicts:" mit dem node-Paket.

<...>

Absatz 2 ist die eigentliche Lösung für das Problem des Betreffenden. Der Betreffende sollte versuchen, dieses Paket zu installieren, anstatt den Symlink manuell zu erstellen. Hier ist ein Link zu diesem Paket im Debian-Paketindex Website.

Es kann mit sudo apt-get install nodejs-legacy installiert werden.

Ich habe keine Informationen darüber gefunden, ob die gesamte Sache von den NPM-Entwicklern übernommen wird, aber ich denke, dass das npm-Paket zu einem bestimmten Zeitpunkt behoben wird und nodejs-legacy wirklich veraltet wird.

114voto

leorex Punkte 2048

Versuchen Sie, node mit nodejs zu verknüpfen. Finden Sie zuerst heraus, wo nodejs ist

whereis nodejs

Dann verknüpfen Sie node mit nodejs

ln -s [der Pfad von nodejs] /usr/bin/node 

Ich gehe davon aus, dass /usr/bin in Ihrem Ausführungspfad liegt. Dann können Sie testen, indem Sie node oder npm in Ihre Befehlszeile eingeben, und jetzt sollte alles funktionieren.

46voto

Eduardo Dennis Punkte 13013

Sie können Nodejs auch mit NVM oder Nodejs Version Manager installieren. Es gibt viele Vorteile bei der Verwendung eines Versionsverwaltungsprogramms. Einer davon ist, dass Sie sich keine Sorgen um dieses Problem machen müssen.

Anweisungen:

sudo apt-get update
sudo apt-get install build-essential libssl-dev

Sobald die erforderlichen Pakete installiert sind, können Sie das nvm-Installationsskript von der GitHub-Seite des Projekts herunterladen. Die Versionsnummer kann unterschiedlich sein, aber im Allgemeinen können Sie es mit der folgenden Syntax herunterladen und installieren:

curl https://raw.githubusercontent.com/creationix/nvm/v0.16.1/install.sh | sh

Dadurch wird das Skript heruntergeladen und ausgeführt. Es installiert die Software in einem Unterverzeichnis Ihres Heimatverzeichnisses unter ~/.nvm. Es fügt auch die erforderlichen Zeilen zur Datei ~/.profile hinzu, um die Datei zu verwenden.

Um Zugriff auf die nvm-Funktionalität zu erhalten, müssen Sie sich ab- und wieder anmelden oder Sie können die Datei ~/.profile so laden, dass Ihre aktuelle Sitzung über die Änderungen informiert ist:

source ~/.profile

Jetzt, da Sie nvm installiert haben, können Sie isolierte Node.js-Versionen installieren.

Um die verfügbaren Versionen von Node.js für die Installation zu erfahren, können Sie Folgendes eingeben:

nvm ls-remote
. . .

v0.11.10
v0.11.11
v0.11.12
v0.11.13
v0.11.14

Wie Sie sehen können, ist die neueste Version zum Zeitpunkt dieses Schreibens v0.11.14. Sie können diese installieren, indem Sie Folgendes eingeben:

nvm install 0.11.14

Normalerweise wechselt nvm zur Verwendung der zuletzt installierten Version. Sie können nvm explizit mitteilen, dass es die soeben heruntergeladene Version verwenden soll, indem Sie Folgendes eingeben:

nvm use 0.11.14

Wenn Sie Node.js mit nvm installieren, wird das ausführbare Programm node genannt. Sie können die Version, die derzeit von der Shell verwendet wird, anzeigen, indem Sie Folgendes eingeben:

node -v

Das vollständige Tutorial finden Sie hier

20voto

Ritesh Punkte 201
  1. Installieren Sie zuerst nvm mit:

    curl https://raw.githubusercontent.com/creationix/nvm/v0.11.1/install.sh | bash
  2. Führen Sie den Befehl aus:

    source ~/.profile
  3. Führen Sie jetzt dies aus, um alle installierten oder anderen Versionen von Paketen anzuzeigen:

    nvm ls-remote
  4. Installierte Pakete werden grün sein. Installieren Sie die gewünschte Version:

    nvm install 6.0.0
  5. Überprüfen Sie, wo es nicht installiert ist:

    which node
  6. Überprüfen Sie die aktuelle Version:

    node -v
    
    n=$(which node);
    n=${n%/bin/node}; 
    chmod -R 755 $n/bin/*; 
    sudo cp -r $n/{bin,lib,share} /usr/local

14voto

Devs love ZenUML Punkte 10325
sudo apt-get --purge remove node
sudo apt-get --purge remove nodejs-legacy
sudo apt-get --purge remove nodejs

sudo apt-get install nodejs-legacy
source ~/.profile

Kombiniere die akzeptierte Antwort mit source ~/.profile aus dem zusammengeklappten Kommentar und einigen Bereinigungsbefehlen davor. Wahrscheinlich musst du auch sudo apt-get install npm ausführen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X