Konflikte zwischen node.js: / sbin / node und / usr / bin / node

32

Ich habe zwei Ubuntu 12.10-Maschinen: Maschine A ist eine VMWare-VM und Maschine B ist ein alter Acer-Laptop. Auf beiden Rechnern habe ich Knoten mit apt-get installiert. Maschine A installiert jedoch die Hauptbinärdatei als /usr/bin/nodeund Maschine B als /usr/bin/nodejs. Hier sind einige Verhaltensweisen, die ich beobachtet habe:

  1. Beide Maschinen kehren /usr/bin/nodeals Antwort auf den which nodeBefehl zurück. Auf Computer B befindet sich jedoch keine solche Datei.
  2. Das Ausgeben des Befehls nodefunktioniert für Maschine A, nicht für B. Auf B muss ich nodejsstattdessen verwenden.
  3. Auf B gibt es eine Binärdatei mit dem Namen / sbin / node, A hat sie nicht.

Dieses Verhalten führt zu Inkonsistenzproblemen bei der Entwicklung auf beiden Computern. Im Moment habe ich die Binärdateien auf B folgendermaßen umbenannt:

sudo mv /sbin/node /sbin/node-sbin
sudo ln -s /usr/bin/nodejs /usr/bin/node

Gibt es eine Möglichkeit, dies wirklich zu beheben, so dass der Knoten /usr/bin/nodeanstelle von installiert wird /usr/bin/nodejs?

Hai Vu
quelle

Antworten:

15

Auf Ubuntu 13.10 funktionierten alle Antworten oben nicht für mich. Es hat endlich funktioniert, als ich nodejs-legacy installiert habe

sudo apt-get install nodejs-legacy

Das hat /usr/bin/nodefür mich richtig gesorgt , damit zB nodemongenutzt werden kann.

Teetrinker
quelle
Irgendeine Idee, warum wir das installieren müssen? Schafft es eigentlich irgendwie den Symlink? Warum hat node den Namen seiner ausführbaren Datei in nodejs geändert?
Augustin Riedinger
Der Name "Knoten" widersprach einem viel älteren Programm. Siehe lists.debian.org/debian-devel-announce/2012/07/msg00002.html und die Antwort von Leftium unten.
Robie Basak
36

Update: Die folgenden Anweisungen wurden geändert, um das nodejs-legacyPaket zu verwenden. ( Weitere Informationen zu Node-Legacy )

Versuchen Sie, das in Konflikt stehende Knotenpaket vollständig zu entfernen:

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

# Confirm it worked
node --version       # v0.10.13
ls -la `which node`  # ... /usr/bin/node -> /etc/alternatives/node

Dies ist mir passiert, als ich versehentlich das non-node.js- nodePaket installiert habe . Obwohl ich es apt-get remove nodevor der Installation des richtigen nodejsPakets getan habe , ist das --purgeArgument vermutlich erforderlich.

Hintergrundinfo :

Es besteht ein Namenskonflikt mit dem Knotenpaket (Amateur Packet Radio Node Program), und die Binary des Knotens wurde von Knoten zu Knoten umbenannt. Sie müssen / usr / bin / node mit / usr / bin / nodejs verknüpfen oder das Amateur Packet Radio Node-Programm deinstallieren, um diesen Konflikt zu vermeiden.

Leftium
quelle
Vielen Dank für die Hintergrundinformationen. Zu diesem Zeitpunkt habe ich keine dieser Maschinen zum Anprobieren, aber ich hoffe, ich kann sie bald wieder besuchen.
Hai Vu
Das bringt dir /usr/bin/nodein Ubuntu 13.10 keinen . Die Antwort von @ user229115 funktioniert jedoch.
Jim Stewart
1
Mit Ubuntu 13.10 erhalten sudo apt-get install nodejs nodejs-legacySie also die nodeBinärdatei als node.js. Wenn Sie jedoch das node(Amateur Packet Radio Node Program) bereits installiert haben, müssen Sie es offensichtlich entfernen.
Jonasfj
1
@AugustinRiedinger: Ich habe meine Antwort aktualisiert. Ich denke, die Kombination aus dem Löschen der 'falsch konfigurierten' Pakete und dem Installieren des nodejs-legacyPakets wird funktionieren.
Leftium
1
Danke, es ist sehr klar. In der Tat funktioniert es bei der Installation des nodejs-lecacyPakets, das möglicherweise nur ein Symlink zur nodejsausführbaren Datei ist ...
Augustin Riedinger
11

Leider hat das Erstellen eines Symlinks für mich nicht funktioniert. Für mich hat es jedoch funktioniert, einen Alias ​​zu erstellen. Fügen Sie in ~/.bashrcoder ~/.bash_aliases(wenn ~/.bashrcdiese Datei geladen wird) einfach die folgende Zeile hinzu:

alias node="nodejs"

Starten Sie Ihre Bash-Sitzung neu, indem Sie bashin die Konsole tippen, und Ihr Alias ​​funktioniert jetzt.

Aust
quelle
2
Wenn ich einen Symlink erstellte, funktionierte dieser erst, nachdem ich ein anderes Terminal gestartet hatte. Versuchen Sie, Ihr Terminal neu zu starten ... oder meine Antwort, die ohne Symlinks / Aliase funktioniert ^^
Leftium
@Leftium: Sie müssen auch ausführen: source ~/.bashrcum die .bashrc-Datei neu zu laden (wenn Sie einen Neustart des Terminals vermeiden möchten), lesen Sie mehr ..
Deepak Joy
Das Symlinking an einem neuen Standort erfordert mit ziemlicher Sicherheit einen hash nodeAufruf in Ihren vorhandenen Terminals, da sich moderne Shells an den Standort von Befehlen erinnern, die zuvor in PATH nachgeschlagen wurden. Der hasheingebaute Befehl in solchen Shells fordert sie auf, die Suche zu wiederholen und den neuen Speicherort zu speichern.
mtraceur
7

Ich denke das ist es:

sudo update-alternatives --install / usr / bin / knoten knoten / usr / bin / knotenjs 10

Verwenden von Debian-Alternativen.

user229115
quelle
Vielen Dank. Dies ist der direkteste Weg, um Ubuntus Entscheidung in dieser Angelegenheit zu korrigieren.
Drew
@drew es sieht so aus, als ob Ubuntu Debians Entscheidung auf der Grundlage des Ubuntu-Fehlers bugs.launchpad.net/ubuntu/+source/node/+bug/1030421 gefolgt ist .
Lloyd Dewolf
1

Späte Antwort, aber für aktuelle Informationen ...

Wenn Sie node.js mit der empfohlenen Methode aus der Infodatei zur Knoten-Github-Installation installieren, wird empfohlen , die Anweisungen im Blog-Artikel der Knotenquelle zu befolgen , anstatt ab dem veralteten Datum apt-get repo zu installieren. Node.js sollte mit dem nodeBefehl ausgeführt werden. sowie den nodejsBefehl, ohne einen neuen Symlink erstellen zu müssen.

Diese Methode aus dem Artikel ist:

# Note the new setup script name for Node.js v0.12
curl -sL https://deb.nodesource.com/setup_0.12 | sudo bash -

# Then install with:
sudo apt-get install -y nodejs

Beachten Sie, dass dies für v0.12 gilt, was in nicht allzu ferner Zukunft wahrscheinlich veraltet sein wird.

Wenn Sie sich hinter einem Unternehmensproxy befinden (wie ich), möchten Sie dem Befehl sudo die Option -E hinzufügen, um die für den Proxy erforderlichen Umgebungsvariablen beizubehalten:

curl -sL https://deb.nodesource.com/setup_0.12 | sudo -E bash -
Erresen
quelle
1

Am Ubuntu 14.04 hatte ich das gleiche Knotenproblem. Ich hatte nicht arbeiten "Node" und arbeiten "NodeJS". Ich habe es gerade getan

sudo apt-get remove node

und gleich danach lief node und nodejs auch :) ich bin neu in linux und das ist ein misstery für mich. Bower rennt jedoch !!!

Georgi Danchev
quelle
0
sudo getconf LONG_BIT
sudo uname -p
  • Bestätigen Sie Ihre CPU-Architektur
  • Finden Sie Ihre node.js-Distribution in der Verzeichnisstruktur unter https://nodejs.org/dist/ (Hinweis: Verschiedene Versionen verschiedener node.js-Distributionen für verschiedene CPU-Architekturen).

Mein Desktop ist derzeit Ubuntu 15.10 AMD64, daher verwende ich in meinem Installationsbeispiel die folgende URL (auch hier variieren die Distributionen):

sudo wget https://nodejs.org/dist/v5.0.0/node-v5.0.0-linux-x64.tar.gz

Wechseln Sie dann in Ihr Download-Verzeichnis:

sudo cd /home/name/Downloads

Führen Sie in Ihrem Download-Verzeichnis Folgendes aus:

sudo tar -C /usr/local --strip-components 1 -xzf node-v5.0.0-linux-x64.tar.gz

Bestätigen Sie die Installation von node.js wie folgt:

sudo ls -l /usr/local/bin/node
sudo ls -l /usr/local/bin/npm

ref. http://www.hostingadvice.com/how-to/install-nodejs-ubuntu-14-04/

Nick Indiessance
quelle
1
-1 Nur der tarBefehl benötigt sudo.
muru
+1 Vielen Dank für diesen besseren Weg - der beste Weg für mich!
1111161171159459134