NVM von root (oder sudo) kann nicht verwendet werden.

103

Ich habe erwähnt, dass meine Anwendung beim Ausführen eine andere Version von NodeJS verwendet sudo.

$ node -v
v0.10.23
$ sudo node -v
v0.11.8-pre

Dieses v0.11.8-pre hat mir einige Probleme verursacht, daher möchte ich es definitiv nicht verwenden, aber ich kann es nicht für root ändern.

$ sudo nvm use v0.10.23
sudo: nvm: command not found

Ich habe versucht, nvm vom Root-Benutzer zu installieren, habe aber den Fehler "NVM bereits installiert" erhalten, aber nvm wurde beim Ausführen von nicht gefunden sudo. Was ist mein Problem?

Vitalii Korsakov
quelle
3
Versuchen Sie es sudo -s und installieren Sie es nvm.
Spiele Brainiac
@GamesBrainiac Sorry, aber ich schrieb, dass ich versucht habe, es von root zu installieren
Vitalii Korsakov
versuchen Sie, /root/.nvm/ zu löschen und nvm von Grund auf neu zu installieren
Antonio E.
Es gibt kein /root/.nvm. Ich habe nvm von sudo installiert und es wurde in den regulären Benutzer homedir
Vitalii Korsakov
4
Dies löst alle meine Probleme, da Sie github.com/xtuple/nvm
Yoo Matsuo

Antworten:

218

Die folgende Befehlsliste (Quelle: digitalocean ) scheint das Problem zu beheben

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

Der obige Befehl ist etwas kompliziert, aber alles, was er tut, ist, die Version des Knotens, die Sie über nvm aktiv haben, in das /usr/local/Verzeichnis zu kopieren (in dem vom Benutzer installierte globale Dateien auf einem Linux-VPS gespeichert sein sollten) und die Berechtigungen so festzulegen , dass alle Benutzer darauf zugreifen können .

Hoffe das hilft!

Venkat Selvan
quelle
7
Danke, es hat mir geholfen.
Vishal Kumar Verma
7
Danke dir! Das hat mir viel Zeit gespart
Quinton Pike
4
Perfekt! Ich danke dir sehr.
Jean-Baptiste Louazel
2
Genial! Letzte Nacht habe ich mein gesamtes RasPi 3-System ruiniert, indem ich die Berechtigungen für npm überall verzweifelt geändert habe. Heute habe ich 3 Stunden lang nach der besten Lösung gesucht, um Node / npm global zu installieren, ohne dass für jeden npm-Aufruf sudo erforderlich ist. Ihre Lösung lief gut mit diesem Beitrag losant.com/blog/how-to-install-nodejs-on-raspberry-pi
bosch
3
Das klingt nach einer großartigen Option, aber ich chmod: cannot operate on dangling symlink ‘/home/ec2-user/.nvm/versions/node/v7.1.0/bin/node-debug’ chmod: cannot operate on dangling symlink ‘/home/ec2-user/.nvm/versions/node/v7.1.0/bin/node-inspector’
bekomme
129

Meine Lösung besteht darin, symbolische Links aus den Versionen von zu erstellen, nodeund npmich verwende Folgendes /usr/local/bin:

sudo ln -s "$NVM_DIR/versions/node/$(nvm version)/bin/node" "/usr/local/bin/node"
sudo ln -s "$NVM_DIR/versions/node/$(nvm version)/bin/npm" "/usr/local/bin/npm"

Dies macht npmund nodefür alle Benutzer verfügbar.

SimpleJ
quelle
1
Tolle Lösung. füge einfach "am Ende der zweiten Zeile hinzu ... (ich konnte dies aus irgendeinem Grund nicht selbst bearbeiten)
Rayee Roded
1
Großartig, das ist bei weitem die beste Lösung. Auf diese Weise verwendet root immer dieselbe npm / node-Version, die Sie für den nvm-Benutzer verwenden. Danke!
Luiscvalmeida
3
Gute Lösung, aber wenn Sie die Version des verwendeten Knotens ändern, müssen Sie die obigen Befehle erneut ausführen.
door_number_three
4
Ich benutze npxziemlich oft. Also habe ich es auch hinzugefügt:sudo ln -s "$NVM_DIR/versions/node/$(nvm version)/bin/npx" "/usr/local/bin/npx"
Thomas
@ SimpleJ wie würden Sie das gleiche tun fürbabel-node
user566245
14

Ihr Problem ist, dass nvmdas nicht im Pfad ist, wenn Sie verwenden sudo.

Also tippe

$ which nvm

und das Ergebnis wird so etwas wie sein

/home/abc/mynvm/nvm

Versuchen Sie es jetzt noch einmal mit sudo:

sudo /home/abc/mynvm/nvm use v0.10.23

Ich gehe davon aus, dass Sie dann auf das Problem stoßen, dass der Root-Benutzer die Version 0.10.13 nicht finden kann, aber die nächste Fehlermeldung wird angezeigt ...

CFrei
quelle
42
which nvmgibt nichts aus
Vitalii Korsakov
6
es gibt auch nichts für root aus
Vitalii Korsakov
3
Problem ist, dass ich mich nie als root anmelde. Warum sollte ich? Wenn ich Root-Zugriff benötige, verwende ich immer sudo. Ja, ich kann mich als root anmelden und nvm installieren, aber in Zukunft konnte ich nicht mehr ausgeführt werden sudo nvm use v0.10.25. Also konnte ich nicht auch sudo nodevom Benutzer verwenden.
Vitalii Korsakov
2
which nvmfunktioniert nie, oder? nvmist keine ausführbare Datei, sondern eine Shell-Funktion. github.com/creationix/nvm/issues/540
Matt
2
Ich habe kürzlich eine ähnliche Frage zu which nvmdiesem Thema gestellt : stackoverflow.com/questions/49156104/… Verwenden Sie diese Optiontype nvm , um die Definition zu enthüllen. Wie Matt sagte, ist es eine Shell-Funktion.
Martin Braun
13

Der Grund dafür ist, dass nvmes sich nicht um ein echtes Programm handelt. Es ist eine Bash-Funktion, die in den Benutzer geladen .profilewird .bashrc, oder ... Sie wird sudoalso nicht wie die meisten anderen Programme automatisch aus dem $ PATH übernommen.

Ein alternativer Knotenversionsmanager ist n: https://github.com/tj/n . Das ist ein echtes Programm, also sudowird es über den $ PATH ohne Hacks aufgenommen (solange sudoes /usr/local/binin seinem $ PATH enthalten ist).

sudo npm install -g n  # install 'n' globally
which n                # should be /usr/local/bin/n

sudo n lts             # need sudo to switch node versions
node --version         # v6.10.0
sudo node --version    # v6.10.0
wisbucky
quelle
Perfekt. Danke "nvm ist kein Problem, aber eine Bash-Funktion" :)
weiterer
Haha, habe gerade mein falsch geschriebenes "Problem" anstelle von "Programm" erkannt;).
weiterer
7

Laut README

Wenn Sie nvm verwenden, müssen Sie sudoein Modul nicht global mit installieren. npm -gTun Sie sudo npm install -g gruntdies stattdessennpm install -g grunt

Benötigen Sie sudo npm?

In meinem Fall muss ich sudo npm run startden Zugriff auf eine Datei benötigen, die Root-Zugriff erfordert. Nach dieser Ausgabe ,

Du benutzt nicht sudo. Sie sollten stattdessen die Datei chmod / chown, damit der Benutzer mit nvm Zugriff auf die Datei hat.

In Summe

Der Betreuer von nvm ist der festen Überzeugung, dass wir nicht müssen sudo: P.

lzl124631x
quelle
6

Ich hatte auch dein Problem. Endlich habe ich es umgangen. Hier ist meine Lösung:

  1. Deinstallieren Sie nvm und nodejs. Hier sind einige hilfreiche Links: Deinstallation von nvm . Wenn Sie nodejs mit apt-get installiert haben, können Sie es mit dem Befehl deinstallieren apt-get purge nodejs.
  2. Installieren Sie eine globale NVM. Siehe diese Seite: nvm global . Wie es heißt: "Standard nvm hat bekannte Schwierigkeiten, in Umgebungen mit mehreren Benutzern oder mit Wurzeln zu arbeiten."

Nach dem Neustart Ihres Terminals können Sie den Befehl ausführen sudo nvm ls.

Qianyue
quelle
1
Dieser Zweig hat 12 Commits vor sich, 1123 Commits hinter creationix: master. direkt aus dem xtuple repo für nvm genommen
MrMesees
6
$ sudo bash -ic "nvm use stable; npm -v"
Now using node v6.3.1 (npm v3.10.3)
3.10.3
pmontrasio
quelle
4

Ich habe das gleiche auf meinem Computer versucht, wo ich es nvmauch habe, und ich habe eine etwas andere Reaktion:

$ sudo node --version                                                                                                                                                                    
sudo: node: command not found

Ich vermute, dass Sie den Knoten 0.11 außerhalb von nvm installiert haben. ( Über Paketmanager oder sogar von der Quelle )

Wenn Sie den Knoten über sudo ausführen, wird stattdessen dieser eigenständige Knoten verwendet.

Macht das Sinn oder irre ich mich?

Aurélien Thieriot
quelle
Ja, du hast recht. Ich habe Node und dann NVM installiert . Aber für normale Benutzer funktioniert alles in Ordnung und für den Root nicht.
Vitalii Korsakov
1
Oh alles klar. Dann denke ich, dass nvm nicht als root ausgeführt werden soll. Tatsächlich bin ich hübsch, dass das Laufen im Benutzerland eine erwünschte Funktion ist. Dies könnte Ihnen jedoch helfen: github.com/creationix/nvm/issues/5
Aurélien Thieriot
Dieser Typ hat anscheinend ein spezielles NVM erstellt, das im Sudo-Modus ausgeführt wird: github.com/xtuple/nvm . Leider nur im Sudo-Modus. Ich weiß nicht, ob es akzeptabel ist
Aurélien Thieriot
0

Installieren Sie nvm global mit
wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.32.1/install.sh | sudo bash

Ricky
quelle
Creationix Autoren NVM, ich wäre sehr vorsichtig mit diesem Drittanbieter-NVM ...
MrMesees
4
Dieser Zweig hat 12 Commits vor sich, 1123 Commits hinter creationix: master. Dies ist ein Problem, bitte entfernen Sie den Link
MrMesees
8
Diese Antwort lässt meine Augen bluten. Sie sollten einfach nichts herunterladen und es in einer Sudo-Bash ausführen, wtf
CharlyDelta
Tatsächlich endet der Befehl wget heutzutage mit | bashnirgendwo sudo: nvm-sh / nvm: Knotenversionsmanager
Elise van Looij
0

Die einfachste Lösung hierfür ist wahrscheinlich, einfach auf die ausführbare Datei nvm.sh zu klicken, wo immer sie sich befindet.

sudo /home/ubuntu/.nvm/nvm.sh install node

Dies funktioniert gut für mich (vorausgesetzt, dies ist der Installationspfad).

Der vollständige Installationsvorgang würde so aussehen

curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.0/install.sh | bash
export NVM_DIR="/home/ubuntu/.nvm"

[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"

Und dann können Sie den obigen Befehl ausführen, um die neu installierte nvm.sh zu treffen

Juckreiz-Raumanzug
quelle