nvm "vergisst" den Knoten in einer neuen Terminalsitzung


546

Vergisst bei Verwendung einer neuen Terminalsitzung in OS X nvmdie Knotenversion und verwendet standardmäßig nichts:

$ nvm ls::

         .nvm
     v0.11.12
     v0.11.13

Ich muss nvm use v.0.11.13in jeder Sitzung weiter schlagen :

         .nvm
     v0.11.12
->   v0.11.13

Ich habe sowohl die brewInstallation als auch das offizielle Installationsskript ausprobiert .

Meine .profilefür die Brauversion:

#nvm
export NVM_DIR=~/.nvm
source $(brew --prefix nvm)/nvm.sh

Und für das Skript install.sh:

$ curl https://raw.githubusercontent.com/creationix/nvm/v0.10.0/install.sh | bash

#nvm
export NVM_DIR="/Users/farhad/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"  # This loads nvm

Irgendein Hinweis darauf, was ich falsch mache?


1
.bash_profile.bashrc
Ich

Antworten:


1181

Versuchen Sie es nvm alias default. Zum Beispiel:

$ nvm alias default 0.12.7

Dadurch wird die Standardknotenversion in Ihrer Shell festgelegt. Stellen Sie dann sicher, dass die Änderung bestehen bleibt, indem Sie das Shell-Fenster schließen, ein neues öffnen und dann: node --version


11
Ist das nicht schon die Aufgabe von nvm use? Nach $ nvm alias default 0.11.13und $ nvm use 0.11.12bekomme ich node --version = 0.11.12. In einer neuen Sitzung ist der Knoten jedoch wieder weg. In Debian habe ich dieses Problem überhaupt nicht.
Frhd

4
Okay, ich hatte einen Tippfehler : nvm alias defaul X. Mit der richtigen Verwendung funktioniert es tatsächlich. nvm install XDann wäre der Workflow also wohl nvm alias default X. Vielen Dank für Ihre Hilfe!
Frhd

21
Ich hatte das gleiche Problem und es war, weil ich das NVM_DIRAfter exportierte nvm.sh. Stellen Sie sicher, dass Sie das NVM_DIRvorher exportieren .
maxwell2022

11
Beachten Sie, dass nvm alias defaultdie Knotenversion nicht für die aktuelle Umgebung festgelegt wird, sondern nur für alle neuen.
Ericsoco

28
Wenn das nicht funktioniert, stellen Sie sicher , in Ihrem .bash_profile(oder .bashrcoder was auch immer) Sie haben nichts zu modifizieren , PATHnachdemsource xx/nvm.sh
goodmanship

85

Alias ​​für sich nodeselbst, um zu vermeiden, dass der Standardalias später zusammen mit Aktualisierungen der Knotenversion aktualisiert wird.

nvm alias default node

2
! WARNUNG: Version 'Knoten' existiert nicht. Standard -> Knoten (-> N / A)?
House3272

6
Was ist mit node alias default stable?
Pierre Henry

1
Ich glaube nicht, dass du mehr verwenden willst stable. Aus den NVM-Dokumenten: "Stable: Dieser Alias ​​ist veraltet und gilt nur für Node v0.12 und früher. Derzeit ist dies ein Alias ​​für Node."
Pherris

1
Zu welchem nodeStandard gehört dies? Der von NVM in der aktuellen Shell installierte und verwendete Knoten oder der Knoten, der möglicherweise vom Installationspaket des Knotens oder von Homebrew usw. auf dem System installiert wurde?
2540625

7
(nvm-Betreuer hier) node(und stable, aber alles, was in semver veröffentlicht wird, ist stabil, das ist jetzt ein nutzloses Wort) verwendet die neueste verfügbare Version. Für lokale Befehle zuletzt installiert; Für Remote-Befehle, spätestens verfügbar.
LJHarb

40

So installieren Sie die neueste stabile Version:

nvm install stable

So setzen Sie die Standardeinstellung auf die stabile Version (anstelle einer bestimmten Version):

nvm alias default stable

So listen Sie installierte Versionen auf:

nvm list

Ab v6.2.0ungefähr sieht es so aus:

$ nvm list
         v4.4.2
->       v6.2.0
default -> stable (-> v6.2.0)
node -> stable (-> v6.2.0) (default)
stable -> 6.2 (-> v6.2.0) (default)
iojs -> N/A (default)

Dies hat hervorragend funktioniert und der Vorschlag zur Verwendung nvm listhilft den Benutzern zu visualisieren, was mit ihrer Versionierung passiert. Vielen Dank!
Solvitieg

30

In meinem Fall hatte ein anderes Programm PATHÄnderungen hinzugefügt.bashrc

Wenn das andere Programm die Initialisierung PATH nach nvm PATHändern würde , würden die Änderungen von nvm vergessen und wir würden den Systemknoten auf unserem PATH(oder keinem Knoten) erhalten.

Die Lösung bestand darin, das NVM-Setup nach unten zu verschieben.bashrc

### BAD .bashrc ###

# NVM initialisation
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm

# Some other program adding to the PATH:
export PATH="$ANT_ROOT:$PATH"

Lösung:

### GOOD .bashrc ###

# Some other program adding to the PATH:
export PATH="$ANT_ROOT:$PATH"

# NVM initialisation
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm

(Dies war mit Bash 4.2.46 unter CentOS. Es scheint mir ein Fehler in Bash zu sein, aber ich kann mich irren.)


1
Das hat mir geholfen! Standard war stecken geblieben.
Redsandro

1
Gib diesem Kerl eine Medaille! Ich hatte nach dem NVM_DIR-Export zusätzliches Laden anderer * rc-Dateien in meinem zshrc, was mich verrückt machte. Vielen Dank!
Bobbytables

Vielen Dank! Das hat mich verrückt gemacht.
Bäume

27

nvm erledigt seine Aufgabe durch Ändern der PATH-Variablen. Sie müssen also sicherstellen, dass Sie Ihren PATH nach dem Sourcing des Skripts nvm.sh nicht irgendwie in etwas anderes ändern.

In meinem Fall wurde nvm.sh in .bashrc aufgerufen, aber dann wurde die PATH-Variable in .bash_profile aktualisiert, wodurch meine Sitzung den Systemknoten vor dem nvm-Knoten fand.


1
Wie kann ich das überprüfen? Ich vermute, dass dies der Fall ist.
Mild Fuzz

Das war mein Fall, danke! Ich habe den Export oben auf meine .zshrc-Datei gesetzt, einfach nach unten verschoben und das Problem wurde gelöst
Alejandro Silva

Das war mein Fall. Die Lösung bestand darin, den Eintrag NVM ~ / .bash_profile an das Ende der Datei + set nvm alias defaultund nvm usean die von mir benötigte Version zu verschieben.
Eugene Tartakovsky

Das war die Lösung für mich. Verschob das Folgende auf den Grund von .bashrc: export NVM_DIR="$HOME/.nvm"then. "/usr/local/opt/nvm/nvm.sh"
asmiller

10

Die am besten bewerteten Lösungen schienen für mich nicht zu funktionieren. Meine Lösung ist unten:

  1. Nvm vollständig mit homebrew deinstallieren:brew uninstall nvm
  2. Neu installieren brew install nvm
  3. Führen Sie im Terminal die folgenden Schritte aus (diese werden auch bei der Installation von nvm über Homebrew aufgelistet):

    mkdir ~ / .nvm cp $ (Brew - Präfix nvm) / nvm-exec ~ / .nvm / Export NVM_DIR = ~ / .nvm Quelle $ (Brew - Präfix nvm) /nvm.sh

Mit den oben beschriebenen Schritten wird das NVM-Arbeitsverzeichnis zu Ihrem $ HOME-Pfad hinzugefügt, nvm-exec in das NVM-Arbeitsverzeichnis kopiert und zu $ ​​HOME / .bashrc, $ HOME / .zshrc oder der entsprechenden Konfigurationsdatei Ihrer Shell hinzugefügt (erneut aus whats entnommen) aufgeführt bei einer NVM-Installation mit Homebrew)


7

Wenn Sie alles noch kein Glück versucht haben, können Sie dies versuchen: _

1 -> NVM deinstallieren

rm -rf ~/.nvm

2 -> Remove npm Abhängigkeiten durch folgende diese

3 -> NVM installieren

curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash

4 -> ~/.bash_profileKonfiguration einstellen

Lauf sudo nano ~/.bash_profile

Kopieren und fügen Sie anschließend ein

export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  # This loads nvm bash_completion

5 -> CONTROL + XÄnderungen speichern

6 -> Ausführen . ~/.bash_profile

7 -> Jetzt sollten Sie nvmauf Ihrem Computer installiert haben. Um den Knotenlauf zu installieren, ist nvm install v7.8.0dies die Standardknotenversion, oder Sie können eine beliebige Version des Knotens installieren


1
Vielen Dank! Dies war die einzige Lösung, die den Knotenpfad auch in Bash festlegte und für mich funktionierte. Ich habe gerade "nvm install node" verwendet, um die neueste Knotenversion zu installieren, anstatt "nvm install v7.8.0" zu verwenden
user3492435

5

Diese Frage wurde für OSX erwähnt, ist mir aber in meinem Linux-Betriebssystem passiert. Ich habe versucht, nvm alias default <version>aber für jede neue Terminalsitzung wurde die verwendete Knotenversion vergessen. Also, hier ist die Lösung, die ich herausgefunden habe.

Stellen Sie sicher, dass Sie einen Standardalias für die Knotenversion festlegen, geben Sie den folgenden Code in .bashrc und ein source .bashrc.

export NVM_DIR="/home/bonnie/.nvm"
## If the file exists and is not empty
if [ -s "$NVM_DIR/nvm.sh" ]; then
    ## Source it
    source "$NVM_DIR/nvm.sh"
fi
NODE_DEFAULT_VERSION=$(<"$NVM_DIR/alias/default")
export PATH="$NVM_DIR/versions/node/$NODE_DEFAULT_VERSION/bin":$PATH

beschreibender Lösungslink


1
Nur ein Hinweis, dies hängt davon ab, dass vbeim Einstellen der Fernbedienung die in der Version enthalten ist. ZB v4.2.4statt 4.2.4.
Vaughan

4

Wenn Sie nvm install 10.14beispielsweise nvm usediese Version für die aktuelle Shell-Sitzung ausführen, wird sie nicht immer wie erwartet als Standard für zukünftige Sitzungen festgelegt. Die Knotenversion, die Sie in einer neuen Shell-Sitzung erhalten, wird durch bestimmt nvm alias default. Verwirrenderweise nvm installwird der Standardalias nur festgelegt, wenn er noch nicht festgelegt ist. Gehen Sie folgendermaßen vor, um das erwartete Verhalten zu erhalten:

nvm alias default ''; nvm install 10.14

Dadurch wird sichergestellt, dass diese Version heruntergeladen wird, für die aktuelle Sitzung verwendet und als Standard für zukünftige Sitzungen festgelegt wird.


3

Führen Sie dies aus, nachdem Sie eine Version installiert haben.

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

Dieser Befehl kopiert jede Version des Knotens, den Sie über nvm aktiv haben, in das Verzeichnis / usr / local / und legt die Berechtigungen so fest, dass alle Benutzer darauf zugreifen können.


Ich würde empfehlen, in diesem Befehl &&s anstelle von ;s zu verwenden. Wenn der whichKnoten nicht gefunden werden kann, möchten wir nicht mit chmod fortfahren /bin/*!
Joeytwiddle

3

Ich habe hier einen neuen Weg gefunden. Die n interaktive Verwendung von Node.js hilft.


Ja! Ich bin mir nicht sicher, ob es daran liegt, dass ich fishShell verwende, aber die akzeptierte Antwort hat bei mir nicht funktioniert. nfunktioniert ein Genuss!
Clozach

2

Ich benutze ZSH, also musste ich ~/.zshrcdie Zeilen bezüglich NVM in dieser Reihenfolge ändern :

[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" # This loads nvm
source ~/.nvm/nvm.sh

1
$ nvm alias default {NODE_VERSION}

Wenn wir den obigen Befehl verwenden, aktualisieren Sie nur die Knotenversion, aber npmdie alte Version wird weiterhin verwendet.

Hier ist eine andere Lösung für die Aktualisierung der beiden nodeund npmin meinem Fall möchte ich Knoten verwenden 8.9.4und ich habe den folgenden Befehl verwendet.

$ nvm use default 8.9.4

Und der Befehl gibt die Ausgabe zurück.

Jetzt mit Knoten v8.9.4 (npm v5.6.0)


0

Wenn Sie auch SDKMAN haben ...

Irgendwie widersprach SDKMAN meinem NVM. Wenn Sie damit am Ende sind und es immer noch nicht herausfinden können, habe ich es einfach behoben, indem ich das "DAS MUSS AM ENDE DER DATEI SEIN ..." von SDKMAN ignoriert und die NVM-Zeilen danach gesetzt habe.

#THIS MUST BE AT THE END OF THE FILE FOR SDKMAN TO WORK!!!
export SDKMAN_DIR="/Users/myname/.sdkman"
[[ -s "/Users/myname/.sdkman/bin/sdkman-init.sh" ]] && source "/Users/myname/.sdkman/bin/sdkman-init.sh"

export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  # This loads nvm bash_completion

0

Bei der Verwendung des integrierten Terminals im VS-Code-Editor trat das gleiche Problem auf. Das Neustarten von VS Code nach dem Ändern der Knotenversion mit nvm hat das Problem für mich behoben.


0

Hier ist eine einfache Anleitung:

1) Installieren:

nvm install 8.10.0

2) Einmal pro Terminal verwenden

nvm use 8.10.0

3) Standardmäßig für alle Terminals einrichten

nvm alias default 8.10.0

Möglicherweise müssen Sie Root-Berechtigungen verwenden, um diese Aktionen auszuführen.

Und vergessen Sie nicht, die NVM-Dokumentation zu lesen, um weitere Informationen zu erhalten.

Beachten Sie auch, dass Sie möglicherweise die Knotenversion für Ihre IDE angeben müssen: Geben Sie hier die Bildbeschreibung ein


-2

Auch für den Fall, dass Sie einen Knoten vor nvm installiert hatten, checken Sie in Ihrem ~ / .bash_profile ein, um Folgendes nicht zu haben:

export PATH=/bin:/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin:$PATH

Wenn Sie es haben, kommentieren / entfernen Sie es und nvm sollte anfangen, die Standardknotenversion zu verarbeiten.


Das Festlegen einer Pfadvariablen hat sicherlich nichts mit der Auswahl der NVM-Version zu tun.
Sn0r

nvm.sh sollte Ihren PFAD ändern, nachdem Sie ihn festgelegt haben (z. B. mit den oben genannten). Dadurch konnte nvm sein Versionsverzeichnis vor / usr / local / bin stellen, in dem sich die "System" -Version des Knotens befindet.
Denis Howe

-3

Nach einer langen Zeit des Konflikts mit diesem Problem habe ich herausgefunden, wie ich es beheben kann. Hier ist eine schrittweise Lösung für das Problem:

  • Öffnen Sie das Terminal und installieren Sie die Befehlszeilen-Entwicklertools:

    xcode-select --install

  • Drücken Sie Enter

  • Installieren Sie die neueste Version von NVM:

    cd ~/

  • Drücken Sie Enter

    git clone https://github.com/creationix/nvm.git .nvm

  • Drücken Sie Enter
  • Falls Sie den Ordner .nvm bereits zuvor erstellt haben, wird die nächste Fehlermeldung angezeigt:

    fatal: destination path '.nvm' already exists and is not an empty directory.

    Andernfalls wird der Klonvorgang so lange ausgeführt, bis er abgeschlossen ist.

  • Schauen Sie sich die neueste NVM-Version an:

    cd ~/.nvm

  • Drücken Sie Enter

    git checkout v0.34.0

    Sie erhalten eine ähnliche Antwort wie:

    HEAD is now at 3d9c31d v0.34.0

    Die Version kann auf verschiedenen Systemen unterschiedlich sein.

    ls

  • Drücken Sie Enter

    . nvm.sh

  • Drücken Sie Enter

    nvm list

  • Drücken Sie Enter

    Sie werden die verschiedenen auf Ihrem Computer installierten Knotenversionen sehen. Möglicherweise sind einige Fehler aufgetreten. Achten Sie nicht darauf.

    nvm ls-remote | tail -n9

  • Drücken Sie Enter

    nvm list

  • Öffnen Sie die Bash mit vim:

    vim ~/.bash_profile

  • Drücken Sie im Vim-Editor:, um eine neue Zeile ieinzugeben INSERT modeund zu beginnen. Wenn Sie beim Bearbeiten Fehler haben, drücken SieESC Taste und beenden Sie :q!das Programm ohne zu speichern.

    export NVM_DIR="$HOME/.nvm" [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm [ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion

  • Drücken Sie die ESCTaste, wenn Sie die Bearbeitung der Datei abgeschlossen haben (der INSERT-Modus verschwindet).

  • Drücken Sie :wq, um die Datei zu speichern.
  • Drücken Sie Enter

    nvm ls-remote | tail -n9

  • Drücken Sie die Eingabetaste und installieren Sie die neueste vorgestellte NVM-Version:

    nvm install 12.6.0

  • Wenn der Vorgang abgeschlossen ist, sehen Sie: Now using node v12.6.0 (npm v6.9.0)

  • Sie können überprüfen, ob die Installation erfolgreich ist, indem Sie Folgendes drücken:

    node -voder npm -ves sollte Ihnen die auf Ihrem System installierten Versionen von nvm und npm anzeigen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.