nvm continua a "dimenticare" il nodo nella nuova sessione del terminale


546

Quando si utilizza una nuova sessione terminale in OS X, nvmdimentica la versione del nodo e il valore predefinito è nulla:

$ nvm ls:

         .nvm
     v0.11.12
     v0.11.13

Devo continuare a colpire nvm use v.0.11.13in ogni sessione:

         .nvm
     v0.11.12
->   v0.11.13

Ho provato sia l' brewinstallazione, sia lo script di installazione ufficiale.

My .profilefor the brew version:

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

E per lo script 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

Qualche idea su cosa sto facendo di sbagliato?


1
Voglio solo aggiungere questo qui - Assicurati di esportare da .bash_profilee non il tuo.bashrc
James111

Risposte:


1181

Prova nvm alias default. Per esempio:

$ nvm alias default 0.12.7

Questo imposta la versione predefinita del nodo nella shell. Quindi verificare che la modifica persista chiudendo la finestra della shell, aprendone una nuova, quindi: node --version


11
Non è già questo il lavoro di nvm use? Dopo $ nvm alias default 0.11.13e $ nvm use 0.11.12, ho capito node --version = 0.11.12. Tuttavia, in una nuova sessione, il nodo è sparito di nuovo. In debian, non ho affatto questo problema.
dal

4
Va bene, Ive ha avuto un errore di battitura: nvm alias defaul X. Con il giusto utilizzo funziona davvero. Quindi il flusso di lavoro sarebbe nvm install Xallora nvm alias default X, immagino. Grazie per l'aiuto!
dal

21
Ho avuto lo stesso problema ed era perché stavo esportando il NVM_DIRdopo nvm.sh. Assicurati di esportare il NVM_DIRprima.
maxwell2022,

11
Si noti che nvm alias defaultnon imposta la versione del nodo per l'ambiente corrente, solo per tutti i nuovi.
ericsoco,

28
Se questo non funziona, assicurarsi che nel vostro .bash_profile(o .bashrco altro) non si ha nulla di modifica PATHdoposource xx/nvm.sh
goodmanship

85

Alias ​​su nodese stesso per evitare di aggiornare in seguito l'alias predefinito insieme agli aggiornamenti della versione del nodo.

nvm alias default node

2
! ATTENZIONE: la versione 'nodo' non esiste. predefinito -> nodo (-> N / A)?
House3272,

6
Che dire node alias default stable?
Pierre Henry,

1
Non penso che tu voglia stablepiù usare . Dai documenti nvm: "stable: questo alias è deprecato e si applica veramente solo al nodo v0.12 e precedenti. Attualmente, questo è un alias per il nodo".
pherris,

1
A quale nodevalore predefinito? Il nodo installato e utilizzato da NVM nella shell corrente o il nodo eventualmente installato sul sistema dal pacchetto di installazione del nodo o da Homebrew ecc.?
2540625,

7
(nvm maintainer qui) node(e stable, ma tutto ciò che è stato rilasciato in semver è stabile, quindi questa è una parola inutile) utilizza l'ultima versione disponibile. Per i comandi locali, ultimo installato; per i comandi remoti, gli ultimi disponibili.
LJHarb,

40

Per installare l'ultima versione stabile:

nvm install stable

Per impostare come predefinito la versione stabile (anziché una versione specifica):

nvm alias default stable

Per elencare le versioni installate:

nvm list

A partire da v6.2.0, sarà simile a:

$ 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)

Questo ha funzionato alla grande e il suggerimento da usare nvm listaiuta gli utenti a visualizzare cosa sta succedendo con il loro controllo delle versioni. Grazie!
Solvitieg,

30

Nel mio caso, un altro programma aveva aggiunto PATHmodifiche a.bashrc

Se l'altro programma ha cambiato il PATH dopo inizializzazione del NVM, poi di NVM PATHcambiamenti sarebbero stati dimenticati, e vorremmo ottenere il nodo del sistema sul nostro PATH(o nessun nodo).

La soluzione era quella di spostare il setup NVM al fondo di.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"

Soluzione:

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

(Questo era con bash 4.2.46 su CentOS. Mi sembra un bug in bash, ma potrei sbagliarmi.)


1
Questo mi ha aiutato! L'impostazione predefinita era bloccata.
Redsandro,

1
Dai a questo ragazzo una medaglia! Ho avuto un ulteriore caricamento di altri file * rc nel mio zshrc dopo che l'esportazione NVM_DIR mi ha fatto impazzire. Grazie!
bobbytables

Grazie! Questo mi stava facendo impazzire.
Alberi

27

nvm fa il suo lavoro cambiando la variabile PATH, quindi devi assicurarti di non cambiare in qualche modo il tuo PATH in qualcos'altro dopo aver acquistato lo script nvm.sh.

Nel mio caso, nvm.sh veniva chiamato in .bashrc ma poi la variabile PATH veniva aggiornata in .bash_profile, il che faceva sì che la mia sessione trovasse il nodo di sistema prima del nodo nvm.


1
come posso ispezionarlo? Sospetto che sia così.
Dolce Fuzz,

questo è stato il mio caso grazie! stavo impostando l'esportazione in cima al mio file .zshrc, basta spostarlo in fondo e il problema è stato risolto
Alejandro Silva,

Quello era il mio caso. La soluzione era spostare la voce NVM ~ / .bash_profile alla fine del file + set nvm alias defaulte nvm usealla versione di cui avevo bisogno.
Eugene Tartakovsky,

Questa è stata la soluzione per me. Spostato quanto segue in fondo a.bashrcexport NVM_DIR="$HOME/.nvm". "/usr/local/opt/nvm/nvm.sh"
Sposta in

10

Le soluzioni più votate non sembrano funzionare per me. La mia soluzione è di seguito:

  1. Disinstallare nvm completamente usando homebrew:brew uninstall nvm
  2. Reinstallare brew install nvm
  3. In Terminale, seguire i passaggi seguenti (elencati anche quando si installa nvm tramite homebrew):

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

I passaggi descritti sopra aggiungeranno la directory di lavoro di NVM al tuo percorso $ HOME, copieranno nvm-exec nella directory di lavoro di NVM e aggiungeranno a $ HOME / .bashrc, $ HOME / .zshrc o il file di configurazione equivalente della shell. (Sempre preso da whats elencato su un'installazione NVM usando homebrew)


7

Se hai provato tutto ancora senza fortuna puoi provare questo: _

1 -> Disinstalla NVM

rm -rf ~/.nvm

2 -> Rimuovere le dipendenze npm seguendo questo

3 -> Installa NVM

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

4 -> Imposta ~/.bash_profileconfigurazione

Correre sudo nano ~/.bash_profile

Copia e incolla seguendo questo

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 + Xsalva le modifiche

6 -> Esegui . ~/.bash_profile

7 -> Ora dovresti aver nvminstallato sul tuo computer, per installare il nodo esegui nvm install v7.8.0questa sarà la versione del nodo predefinita oppure puoi installare qualsiasi versione del nodo


1
Molte grazie! Questa era l'unica soluzione che imposta il percorso del nodo anche in bash e ha funzionato per me. Ho appena usato "nvm install node" per installare l'ultima versione del nodo anziché usare "nvm install v7.8.0"
user3492435

5

Questa domanda è stata menzionata per l'OSX, ma mi è capitato nel mio sistema operativo Linux. Ho provato ad usare nvm alias default <version>ma per ogni nuova sessione del terminale la versione del nodo usata è stata dimenticata. quindi, ecco la soluzione che ho capito.

assicurarsi di impostare un alias predefinito per la versione del nodo , inserire il seguente codice in .bashrc e 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

collegamento alla soluzione descrittiva


1
Solo una nota, questo si basa sull'inclusione vdella versione durante l'impostazione del telecomando. Ad esempio v4.2.4invece di 4.2.4.
vaughan,

4

Fare nvm install 10.14, ad esempio, nvm usequella versione per la sessione di shell corrente ma non la imposterà sempre come predefinita per le sessioni future come ci si aspetterebbe. La versione del nodo ottenuta in una nuova sessione della shell è determinata da nvm alias default. Confusamente, nvm installimposterà l'alias predefinito solo se non è già impostato. Per ottenere il comportamento previsto, procedere come segue:

nvm alias default ''; nvm install 10.14

Questo assicurerà che quella versione sia scaricata, utilizzarla per la sessione corrente e impostarla come predefinita per le sessioni future.


3

eseguilo dopo aver installato qualsiasi versione,

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

Questo comando sta copiando qualsiasi versione del nodo attivo tramite nvm nella directory / usr / local / e sta impostando le autorizzazioni in modo che tutti gli utenti possano accedervi.


Consiglierei di usare &&s invece di ;s in quel comando. Se il whichnodo non riesce a trovare il nodo, non vogliamo procedere a chmod /bin/*!
joeytwiddle,


2

Sto usando ZSH, quindi ho dovuto modificare ~/.zshrccon le righe riguardanti NVM in questo ordine:

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

1
$ nvm alias default {NODE_VERSION}

quando usiamo il comando sopra, aggiorna solo la versione del nodo ma npmusa ancora la versione precedente.

Ecco un'altra soluzione per aggiornare entrambi nodee npm, nel mio caso, voglio usare il nodo 8.9.4e ho usato il comando seguente.

$ nvm use default 8.9.4

E il comando restituisce l'output.

Ora usando il nodo v8.9.4 (npm v5.6.0)


0

Se hai anche SDKMAN ...

In qualche modo SDKMAN era in conflitto con il mio NVM. Se sei a tuo agio con questo e ancora non riesci a capirlo, l'ho appena risolto ignorando il "QUESTO DEVE ESSERE ALLA FINE DEL FILE ..." di SDKMAN e inserendo le linee 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

0

Stavo affrontando lo stesso problema durante l'utilizzo del terminale integrato nell'editor VS Code. Il riavvio del codice VS dopo aver modificato la versione del nodo utilizzando nvm ha risolto il problema per me.


0

Ecco una semplice istruzione:

1) Installa:

nvm install 8.10.0

2) Utilizzare una volta per terminale

nvm use 8.10.0

3) Impostare come predefinito per tutti i terminali

nvm alias default 8.10.0

Potrebbe essere necessario utilizzare le autorizzazioni di root per eseguire tali azioni.

E non dimenticare di consultare la documentazione di nvm per maggiori informazioni.

Inoltre, potrebbe essere necessario specificare la versione del nodo per l'IDE: inserisci qui la descrizione dell'immagine


-2

Inoltre, nel caso in cui il nodo fosse installato prima di nvm, controllare nel proprio ~ / .bash_profile per non avere qualcosa del tipo:

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

Se lo possiedi, commentalo / rimuovilo e nvm dovrebbe iniziare a gestire la versione del nodo predefinita.


L'impostazione di una variabile di percorso non ha nulla a che fare con la selezione della versione di nvm, sicuramente?
sn0r

nvm.sh dovrebbe modificare il PATH dopo averlo impostato (ad es. con quanto sopra). Questo lascia che nvm metta la sua directory di versione prima di / usr / local / bin dove risiede la versione "di sistema" del nodo.
Denis Howe,

-3

Dopo un lungo periodo di conflitto con questo problema, ho scoperto come risolverlo. Ecco una soluzione dettagliata per il problema:

  • Apri terminale e installa gli strumenti per sviluppatori della riga di comando:

    xcode-select --install

  • Premere Invio

  • Installa l'ultima versione di NVM:

    cd ~/

  • Premere Invio

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

  • Premere Invio
  • Nel caso in cui tu abbia già creato la cartella .nvm in precedenza, vedrai il prossimo messaggio di errore:

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

    Altrimenti, vedrai il processo di clonazione in esecuzione fino al termine.

  • Scopri l'ultima versione di NVM:

    cd ~/.nvm

  • Premere Invio

    git checkout v0.34.0

    Riceverai una risposta simile a:

    HEAD is now at 3d9c31d v0.34.0

    La versione potrebbe essere diversa su sistemi diversi.

    ls

  • Premere Invio

    . nvm.sh

  • Premere Invio

    nvm list

  • Premere Invio

    Vedrai le diverse versioni del nodo installate sul tuo computer, potrebbero esserci degli errori, non prestare loro attenzione.

    nvm ls-remote | tail -n9

  • Premere Invio

    nvm list

  • Apri bash usando vim:

    vim ~/.bash_profile

  • All'interno dell'editor vim premere: iper accedere INSERT modee iniziare una nuova riga. Se si verificano errori durante la modifica, premere il ESCtasto e quindi :q!per uscire senza salvare.

    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

  • Premi il ESCtasto quando hai finito di modificare il file (vedrai che la modalità INSERT scompare).

  • Premere :wqper salvare il file.
  • Premere Invio

    nvm ls-remote | tail -n9

  • Premi Invio e installa la versione nvm più recente presentata:

    nvm install 12.6.0

  • Al termine del processo vedrai: Now using node v12.6.0 (npm v6.9.0)

  • Puoi verificare se l'installazione ha esito positivo premendo:

    node -vo npm -vdovrebbe mostrare le versioni di nvm e npm installate sul sistema.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.