nvm ciągle „zapomina” węzeł w nowej sesji terminala

545

Po użyciu nowej sesji terminala w systemie OS X nvmzapomina o wersji węzła i przyjmuje wartość domyślną:

$ nvm ls:

         .nvm
     v0.11.12
     v0.11.13

Muszę ciągle uderzać nvm use v.0.11.13w każdej sesji:

         .nvm
     v0.11.12
->   v0.11.13

Próbowałem zarówno brewinstalacji, jak i oficjalnego skryptu instalacyjnego.

Mój .profiledla wersji naparu:

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

A dla skryptu 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

Masz jakieś wskazówki, co robię źle?

frhd
źródło
1
Po prostu chcę to dodać tutaj - Upewnij się, że eksportujesz, .bash_profilea nie twój.bashrc
James111

Odpowiedzi:

1181

Spróbować nvm alias default. Na przykład:

$ nvm alias default 0.12.7

Ustawia domyślną wersję węzła w twojej powłoce. Następnie sprawdź, czy zmiana się utrzymuje, zamykając okno powłoki, otwierając nowe, a następnie: node --version

dylanty
źródło
11
Czy to już nie jest zadanie używania NVM? Po $ nvm alias default 0.11.13i $ nvm use 0.11.12rozumiem node --version = 0.11.12. Mimo to w nowej sesji węzeł ponownie zniknął. W debianie wcale nie mam tego problemu.
frhd
4
Dobrze, Ive miał literówkę: nvm alias defaul X. Przy właściwym użyciu to faktycznie działa. Wydaje mi się, że przepływ pracy byłby nvm install Xwtedy nvm alias default X. Dzięki za pomoc!
frhd
21
Miałem ten sam problem i to dlatego, że eksportowałem NVM_DIRpóźniej nvm.sh. Pamiętaj, aby wyeksportować NVM_DIRwcześniej.
maxwell2022,
11
Zauważ, że nvm alias defaultnie ustawia wersji węzła dla bieżącego środowiska, tylko dla wszystkich nowych.
ericsoco
28
Jeśli to nie zadziała, upewnij się, że w twoim .bash_profile(lub .bashrcczymkolwiek) nie masz nic PATHpo modyfikacjisource xx/nvm.sh
jakość wykonania
85

Alias ​​do nodesiebie, aby później nie aktualizować domyślnego aliasu wraz z aktualizacjami wersji węzła.

nvm alias default node
Tarun
źródło
2
! OSTRZEŻENIE: Wersja „węzeł” nie istnieje. domyślnie -> węzeł (-> nie dotyczy)?
House3272,
6
Co node alias default stable?
Pierre Henry
1
Nie sądzę, że chcesz stablejuż z niego korzystać . Z dokumentacji nvm: „stabilny: ten alias jest przestarzały i naprawdę dotyczy tylko węzła v0.12 i wcześniejszych. Obecnie jest to alias dla węzła”.
pherris
1
Do czego nodeto domyślne? Węzeł zainstalowany i używany przez NVM w bieżącej powłoce, czy Węzeł ewentualnie zainstalowany w systemie przez pakiet instalacyjny Node lub Homebrew itp.?
2540625
7
(opiekun nvm tutaj) node(i stable, ale wszystko, co wydano w semver, jest stabilne, więc teraz jest to bezużyteczne słowo) używa najnowszej dostępnej wersji. W przypadku poleceń lokalnych, najnowszy zainstalowany; dla poleceń zdalnych, najnowsze dostępne.
LJHarb
40

Aby zainstalować najnowszą stabilną wersję:

nvm install stable

Aby ustawić domyślną wersję stabilną (zamiast konkretnej wersji):

nvm alias default stable

Aby wyświetlić listę zainstalowanych wersji:

nvm list

Od v6.2.0tego będzie wyglądać mniej więcej tak:

$ 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)
ohho
źródło
Działa to świetnie, a sugestia użycia nvm listpomaga użytkownikom wizualizować, co dzieje się z ich wersjonowaniem. Dzięki!
Solvitieg
30

W moim przypadku inny program dodał PATHzmiany do.bashrc

Gdyby inny program zmienił PATH po inicjalizacji nvm, wówczas PATHzmiany nvm zostałyby zapomniane, i dostalibyśmy węzeł systemowy na naszym PATH(lub żadnym) węźle.

Rozwiązaniem było przenieść konfigurację NVM do dołu z.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"

Rozwiązanie:

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

(Było to w wersji bash 4.2.46 na CentOS. Wydaje mi się, że to błąd w bashu, ale mogę się mylić.)

joeytwiddle
źródło
1
To mi pomogło! Domyślnie utknął.
Redsandro,
1
Daj temu facetowi medal! Miałem dodatkowe ładowanie innych plików * rc w moim zshrc po eksporcie NVM_DIR doprowadziło mnie to do szaleństwa. Dziękuję Ci!
bobbytables,
Dziękuję Ci! To doprowadzało mnie do szału.
Drzewa
27

nvm wykonuje swoje zadanie, zmieniając zmienną PATH, więc musisz upewnić się, że po zmianie źródła nvm.sh nie zmienisz PATH na coś innego.

W moim przypadku nvm.sh został wywołany w .bashrc, ale zmienna PATH była aktualizowana w .bash_profile, co spowodowało, że moja sesja znalazła węzeł systemowy przed węzłem nvm.

Jeff Mikels
źródło
1
jak mogę to sprawdzić? Podejrzewam, że tak jest.
Łagodny Fuzz,
to była moja sprawa dzięki! ustawiałem eksport na górze w moim pliku .zshrc, po prostu przenieś go na dół, a problem został rozwiązany
Alejandro Silva
To była moja sprawa. Rozwiązaniem było przeniesienie wpisu NVM ~ / .bash_profile na koniec pliku + zestaw nvm alias defaulti nvm usedo wersji, której potrzebowałem.
Eugene Tartakovsky
To było dla mnie rozwiązanie. Przeniesiono następujący .bashrcexport NVM_DIR="$HOME/.nvm". "/usr/local/opt/nvm/nvm.sh"
tekst
10

Najwyżej oceniane rozwiązania nie działały dla mnie. Moje rozwiązanie jest poniżej:

  1. Całkowicie odinstaluj NVM za pomocą Homebrew:brew uninstall nvm
  2. Zainstaluj ponownie brew install nvm
  3. W Terminalu wykonaj poniższe kroki (są one również wymienione podczas instalowania NVM przez Homebrew):

    mkdir ~ / .nvm cp $ (brew --prefix nvm) / nvm-exec ~ / .nvm / export NVM_DIR = ~ / .nvm source $ (brew --prefix nvm) /nvm.sh

Kroki opisane powyżej dodają katalog roboczy NVM do ścieżki $ HOME, skopiują nvm-exec do katalogu roboczego NVM i dodadzą do $ HOME / .bashrc, $ HOME / .zshrc lub równoważnego pliku konfiguracyjnego powłoki. (Ponownie pobrany z whats wymienione w instalacji NVM przy użyciu homebrew)

Joe
źródło
7

Jeśli próbujesz wszystkiego, wciąż nie masz szczęścia, możesz spróbować tego: _

1 -> Odinstaluj NVM

rm -rf ~/.nvm

2 -> Usuń zależności npm, wykonując to

3 -> Zainstaluj NVM

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

4 -> Ustaw ~/.bash_profilekonfigurację

Biegać sudo nano ~/.bash_profile

Skopiuj i wklej po tym

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 + Xzapisz zmiany

6 -> Uruchom . ~/.bash_profile

7 -> Teraz powinieneś nvmzainstalować na swoim komputerze, aby zainstalować uruchomienie węzła, nvm install v7.8.0będzie to domyślna wersja węzła lub możesz zainstalować dowolną wersję węzła

Gabbar
źródło
1
Wielkie dzięki! To było jedyne rozwiązanie, które ustawia ścieżkę węzła również w bash i działało dla mnie. Właśnie użyłem „nvm install node”, aby zainstalować najnowszą wersję węzła, zamiast używać „nvm install v7.8.0”
3492435
5

To pytanie wspominało o OSX, ale zdarzyło mi się to w moim systemie Linux. Próbowałem użyć, nvm alias default <version>ale dla każdej nowej sesji terminala używana wersja węzła została zapomniana. oto rozwiązanie, które wymyśliłem.

upewnij się, że ustawiłeś domyślny alias dla wersji węzła , umieść następujący kod w .bashrc i 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

opisowy link do rozwiązania

souparno majumder
źródło
1
Tylko uwaga, polega to na uwzględnieniu vw wersji podczas ustawiania pilota. Np. v4.2.4Zamiast 4.2.4.
vaughan
4

Robi nvm install 10.14, na przykład, nvm useże wersja dla bieżącej sesji powłoki, ale to będzie nie zawsze ustawić go jako domyślny dla przyszłych sesjach, jak można by oczekiwać. Wersja węzła, którą otrzymujesz w nowej sesji powłoki, jest określona przez nvm alias default. Myląco nvm installustawi domyślny alias tylko wtedy, gdy nie jest jeszcze ustawiony. Aby uzyskać oczekiwane zachowanie, wykonaj następujące czynności:

nvm alias default ''; nvm install 10.14

Zapewni to pobranie tej wersji, użycie jej dla bieżącej sesji i ustawienie jej jako domyślnej dla przyszłych sesji.

Denis Howe
źródło
3

uruchom to po zainstalowaniu dowolnej wersji,

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

To polecenie kopiuje dowolną wersję węzła, którą masz aktywną przez nvm, do katalogu / usr / local / i ustawia uprawnienia, aby wszyscy użytkownicy mieli do nich dostęp.

Mouafa Ahmed
źródło
Poleciłbym użycie &&s zamiast ;s w tym poleceniu. Jeśli whichnie uda się znaleźć węzła, nie chcemy kontynuować chmod /bin/*!
joeytwiddle
3

Znalazłem tutaj nowy sposób. Korzystanie n Interaktywnie Zarządzaj Twój node.js pomaga.

Harshit Garg
źródło
Tak! Nie jestem pewien, czy to dlatego, że używam fishpowłoki, ale zaakceptowana odpowiedź nie działała dla mnie. ndziała uczta!
clozach
2

Używam ZSH, więc musiałem zmodyfikować ~/.zshrcwiersze dotyczące NVM w tej kolejności:

[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" # This loads nvm
source ~/.nvm/nvm.sh
Matt Walterspieler
źródło
1
$ nvm alias default {NODE_VERSION}

gdy użyjemy powyższego polecenia, tylko zaktualizuj wersję węzła, ale npmnadal używa starej wersji.

Oto kolejny rozwiązaniem dla obu aktualizacji nodei npm, w moim przypadku chcę użyć węzła 8.9.4i Użyłem poniżej polecenia.

$ nvm use default 8.9.4

A polecenie zwraca dane wyjściowe.

Teraz używa węzła v8.9.4 (npm v5.6.0)

Anish Agarwal
źródło
0

Jeśli masz także SDKMAN ...

W jakiś sposób SDKMAN był w konflikcie z moim NVM. Jeśli masz już dość rozumowania i nadal nie możesz tego rozgryźć, po prostu to naprawiłem, ignorując „TO MUSI BYĆ NA KOŃCU PLIKU ...” SDKMAN i umieszczając za nim linie NVM.

#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
itsDrew
źródło
0

Napotkałem ten sam problem podczas korzystania ze zintegrowanego terminala w edytorze VS Code. Ponowne uruchomienie kodu VS po zmianie wersji węzła za pomocą nvm naprawiło problem.

RS1879
źródło
0

Oto prosta instrukcja:

1) Zainstaluj:

nvm install 8.10.0

2) Użyj raz na terminal

nvm use 8.10.0

3) Ustaw jako domyślne dla wszystkich terminali

nvm alias default 8.10.0

Do wykonania tych czynności może być konieczne użycie uprawnień administratora.

I nie zapomnij sprawdzić dokumentacji NVM, aby uzyskać więcej informacji.

Należy również pamiętać, że może być konieczne określenie wersji węzła dla IDE: wprowadź opis zdjęcia tutaj

Arsenij II
źródło
-2

Również w przypadku, gdy masz zainstalowany węzeł przed nvm, sprawdź ~ ~ .bash_profile, aby nie mieć czegoś takiego:

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

Jeśli tak, skomentuj / usuń, a nvm powinien rozpocząć obsługę domyślnej wersji węzła.

tibbus
źródło
Z pewnością ustawienie zmiennej ścieżki nie ma nic wspólnego z wyborem wersji NVM?
sn0r
nvm.sh powinien zmodyfikować ŚCIEŻKĘ po jej ustawieniu (np. za pomocą powyższego). Pozwala to nvm umieścić katalog wersji przed / usr / local / bin, w którym znajduje się wersja „systemowa” węzła.
Denis Howe
-3

Po długim czasie konfliktu z tym problemem znalazłem sposób, aby go naprawić. Oto rozwiązanie problemu krok po kroku:

  • Otwórz terminal i zainstaluj narzędzia programistyczne wiersza polecenia:

    xcode-select --install

  • Naciśnij enter

  • Zainstaluj najnowszą wersję NVM:

    cd ~/

  • Naciśnij enter

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

  • Naciśnij enter
  • Jeśli już wcześniej utworzyłeś folder .nvm, zobaczysz następny komunikat o błędzie:

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

    W przeciwnym razie zobaczysz, że proces klonowania działa, dopóki się nie zakończy.

  • Sprawdź najnowszą wersję NVM:

    cd ~/.nvm

  • Naciśnij enter

    git checkout v0.34.0

    Otrzymasz odpowiedź podobną do:

    HEAD is now at 3d9c31d v0.34.0

    Wersja może być inna w różnych systemach.

    ls

  • Naciśnij enter

    . nvm.sh

  • Naciśnij enter

    nvm list

  • Naciśnij enter

    Zobaczysz różne wersje węzłów zainstalowane na twoim komputerze, mogą wystąpić błędy, nie zwracaj na nie uwagi.

    nvm ls-remote | tail -n9

  • Naciśnij enter

    nvm list

  • Otwórz bash używając vima:

    vim ~/.bash_profile

  • W edytorze vim naciśnij:, iaby wejść INSERT modei rozpocząć nowy wiersz. Jeśli podczas edycji wystąpią jakieś błędy, naciśnij ESCprzycisk, a następnie :q!wyjdź bez zapisywania.

    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

  • Naciśnij ESCklawisz po zakończeniu edycji pliku (zobaczysz, że tryb INSERT znika).

  • Naciśnij, :wqaby zapisać plik.
  • Naciśnij enter

    nvm ls-remote | tail -n9

  • Naciśnij enter i zainstaluj najnowszą prezentowaną wersję NVM:

    nvm install 12.6.0

  • Po zakończeniu procesu zobaczysz: Now using node v12.6.0 (npm v6.9.0)

  • Możesz sprawdzić, czy instalacja się powiedzie, naciskając:

    node -vlub npm -vpowinien pokazywać wersje zarówno NVM, jak i NPM zainstalowane w twoim systemie.

Eden Sharvit
źródło