nvm mantiene el nodo "olvidando" en una nueva sesión de terminal


546

Al usar una nueva sesión de terminal en OS X, nvmolvida la versión del nodo y por defecto es nada:

$ nvm ls:

         .nvm
     v0.11.12
     v0.11.13

Tengo que seguir golpeando nvm use v.0.11.13en cada sesión:

         .nvm
     v0.11.12
->   v0.11.13

He intentado tanto la brewinstalación como el script de instalación oficial.

Mi .profilepara la versión de preparación:

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

Y para el 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

¿Alguna pista de lo que estoy haciendo mal?


1
Solo quiero agregar esto aquí - Asegúrate de exportar .bash_profiley no de tu.bashrc
James111

Respuestas:


1181

Tratar nvm alias default. Por ejemplo:

$ nvm alias default 0.12.7

Esto establece la versión de nodo predeterminada en su shell. Luego verifique que el cambio persista cerrando la ventana de shell, abriendo una nueva, luego: node --version


11
¿No es este ya el trabajo de uso de nvm? Después $ nvm alias default 0.11.13y $ nvm use 0.11.12, entiendo node --version = 0.11.12. Aún así, en una nueva sesión, el nodo desaparece nuevamente. En debian, no tengo este problema en absoluto.
Viernes

44
Está bien, he tenido un error tipográfico: nvm alias defaul X. Con el uso correcto, realmente funciona. Entonces el flujo de trabajo sería nvm install Xentonces nvm alias default X, supongo. Gracias por ayudar!
Viernes

21
Tuve el mismo problema y fue porque estaba exportando el NVM_DIRafter nvm.sh. Asegúrese de exportar el NVM_DIRantes.
maxwell2022

11
Tenga en cuenta que nvm alias defaultno establece la versión del nodo para el entorno actual, solo para todos los nuevos.
ericsoco

28
Si eso no funciona, asegúrate de que en tu .bash_profile(o .bashrclo que sea) no tengas nada que modificar PATHdespuéssource xx/nvm.sh
bondad

85

Alias ​​para nodeevitar actualizar el alias predeterminado junto con las actualizaciones de la versión del nodo más adelante.

nvm alias default node

2
! ADVERTENCIA: La versión 'nodo' no existe. predeterminado -> nodo (-> N / A)?
Casa3272

66
¿Qué hay de node alias default stable?
Pierre Henry el

1
No creo que quieras usar stablemás. De los documentos de nvm: "estable: este alias está en desuso y solo se aplica realmente al nodo v0.12 y anteriores. Actualmente, este es un alias para el nodo".
pherris

1
¿A qué se nodeaplica esto por defecto? ¿El nodo instalado y utilizado por NVM en el shell actual, o el nodo posiblemente instalado en el sistema por el paquete de instalación del nodo o Homebrew, etc.?
2540625

77
(nvm mantenedor aquí) node(y stable, pero todo lo publicado en semver es estable, por lo que ahora es una palabra inútil) usa la última versión disponible. Para comandos locales, último instalado; para comandos remotos, último disponible.
LJHarb

40

Para instalar la última versión estable:

nvm install stable

Para establecer por defecto la versión estable (en lugar de una versión específica):

nvm alias default stable

Para enumerar las versiones instaladas:

nvm list

A partir de entonces v6.2.0, se verá algo así como:

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

Esto funcionó muy bien y la sugerencia de uso nvm listayuda a los usuarios a visualizar lo que sucede con sus versiones. ¡Gracias!
Solvitieg

30

En mi caso, otro programa había agregado PATHcambios a.bashrc

Si el otro programa cambió el PATH después de la inicialización de NVM, luego de NVM PATHserían olvidados cambios, y nos gustaría obtener el nodo del sistema en nuestra PATH(o ningún nodo).

La solución fue mover la configuración de nvm al final de.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"

Solución:

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

(Esto fue con bash 4.2.46 en CentOS. Me parece un error en bash, pero puedo estar equivocado).


1
¡Esto me ayudó! El valor predeterminado estaba atascado.
Redsandro

1
¡Dale una medalla a este tipo! Tuve una carga adicional de otros archivos * rc en mi zshrc después de que la exportación NVM_DIR me volviera loco. ¡Gracias!
bobbytables

¡Gracias! Esto me estaba volviendo loco.
Árboles

27

nvm hace su trabajo al cambiar la variable PATH, por lo que debe asegurarse de no cambiar su PATH de alguna otra manera después de obtener el script nvm.sh.

En mi caso, se llamaba a nvm.sh en .bashrc pero luego la variable PATH se actualizaba en .bash_profile, lo que hacía que mi sesión encontrara el nodo del sistema antes del nodo nvm.


1
¿Cómo puedo inspeccionar esto? Sospecho que este es el caso.
Mild Fuzz

este fue mi caso gracias! Estaba configurando la exportación en la parte superior de mi archivo .zshrc, solo muévelo a la parte inferior y el problema se resolvió
Alejandro Silva

Ese fue mi caso. La solución fue mover la entrada NVM ~ / .bash_profile al final del archivo + set nvm alias defaulty nvm usea la versión que necesitaba.
Eugene Tartakovsky

Esta fue la solución para mí. Movió lo siguiente al final de .bashrc: export NVM_DIR="$HOME/.nvm"entonces. "/usr/local/opt/nvm/nvm.sh"
asmiller

10

Las soluciones mejor calificadas no parecían funcionar para mí. Mi solución está abajo:

  1. Desinstale nvm completamente usando homebrew:brew uninstall nvm
  2. Reinstalar brew install nvm
  3. En Terminal, siga los pasos a continuación (estos también se enumeran al instalar nvm a través de homebrew):

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

Los pasos descritos anteriormente agregarán el directorio de trabajo de NVM a su ruta $ HOME, copiará nvm-exec al directorio de trabajo de NVM y lo agregarán a $ HOME / .bashrc, $ HOME / .zshrc, o el archivo de configuración equivalente de su shell. listado en una instalación NVM usando homebrew)


7

Si has intentado todo y aún no tienes suerte, puedes intentar esto:

1 -> Desinstalar NVM

rm -rf ~/.nvm

2 -> Eliminar dependencias npm siguiendo esto

3 -> Instalar NVM

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

4 -> Configurar ~/.bash_profileconfiguración

correr sudo nano ~/.bash_profile

Copia y pega después de esto

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 + Xguardar los cambios

6 -> Ejecutar . ~/.bash_profile

7 -> Ahora deberías haber nvminstalado en tu máquina, para instalar el nodo, nvm install v7.8.0esta será la versión predeterminada del nodo o puedes instalar cualquier versión del nodo


1
¡Muchas gracias! Esta fue la única solución que también estableció la ruta del nodo en bash y funcionó para mí. Acabo de usar "nvm install node" para instalar la última versión del nodo en lugar de usar "nvm install v7.8.0"
user3492435

5

Esta pregunta se ha mencionado para OSX, pero me sucedió en mi sistema operativo Linux. Intenté usar nvm alias default <version>pero para cada nueva sesión de terminal se olvidó la versión de nodo utilizada. Entonces, aquí está la solución que descubrí.

asegúrese de establecer un alias predeterminado para la versión del nodo , coloque el siguiente código en .bashrc y 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

enlace de solución descriptiva


1
Solo una nota, esto se basa en incluir el ven la versión al configurar el control remoto. Por ejemplo, en v4.2.4lugar de 4.2.4.
vaughan

4

Hacer nvm install 10.14, por ejemplo, nvm useesa versión para la sesión de shell actual, pero no siempre la establecerá como predeterminada para futuras sesiones como era de esperar. La versión de nodo que obtiene en una nueva sesión de shell está determinada por nvm alias default. Confusamente, nvm installsolo establecerá el alias predeterminado si aún no está configurado. Para obtener el comportamiento esperado, haga esto:

nvm alias default ''; nvm install 10.14

Esto asegurará que se descargue esa versión, úsela para la sesión actual y configúrela como predeterminada para futuras sesiones.


3

ejecuta esto después de instalar cualquier versión,

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

Este comando copia cualquier versión del nodo que tenga activa a través de nvm en el directorio / usr / local / y configura los permisos para que todos los usuarios puedan acceder a ellos.


Recomendaría usar &&s en lugar de ;s en ese comando. Si whichno puede encontrar el nodo, ¡no queremos continuar con chmod /bin/*!
joeytwiddle


2

Estoy usando ZSH, así que tuve que modificar ~/.zshrccon las líneas relativas a NVM en ese orden:

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

1
$ nvm alias default {NODE_VERSION}

cuando usamos el comando anterior, solo actualizamos la versión del nodo, pero npmaún utiliza la versión anterior.

Aquí hay otra solución para actualizar ambos nodey npm, en mi caso, quiero usar el nodo 8.9.4y he usado el siguiente comando.

$ nvm use default 8.9.4

Y el comando devuelve la salida.

Ahora usando el nodo v8.9.4 (npm v5.6.0)


0

Si también tienes SDKMAN ...

De alguna manera SDKMAN estaba en conflicto con mi NVM. Si está loco con esto y todavía no puede resolverlo, lo solucioné ignorando el "ESTO DEBE ESTAR AL FINAL DEL ARCHIVO ..." de SDKMAN y colocando las líneas de NVM después.

#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

Estaba enfrentando el mismo problema mientras usaba el terminal integrado en el editor de VS Code. Reiniciar VS Code después de cambiar la versión del nodo usando nvm me solucionó el problema.


0

Aquí hay una instrucción simple:

1) Instalar:

nvm install 8.10.0

2) Usar una vez por terminal

nvm use 8.10.0

3) Configurar por defecto para todos los terminales

nvm alias default 8.10.0

Es posible que deba usar permisos de root para realizar esas acciones.

Y no olvide consultar la documentación de nvm para obtener más información.

También tenga en cuenta que es posible que deba especificar la versión del nodo para su IDE: ingrese la descripción de la imagen aquí


-2

También en caso de que haya instalado un nodo antes de nvm, verifique su ~ / .bash_profile para que no tenga algo como:

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

Si lo tiene, coméntelo / elimínelo y nvm debería comenzar a manejar la versión de nodo predeterminada.


¿Establecer una variable de ruta no tiene nada que ver con la selección de la versión nvm, seguramente?
sn0r

nvm.sh debería modificar su RUTA después de configurarla (por ejemplo, con lo anterior). Esto permitió que nvm pusiera su directorio de versión antes de / usr / local / bin donde vive la versión del "sistema" del nodo.
Denis Howe

-3

Después de un largo tiempo de conflicto con este problema, descubrí cómo solucionarlo. Aquí hay una solución paso a paso para el problema:

  • Abra la terminal e instale las herramientas de desarrollador de línea de comandos:

    xcode-select --install

  • Presione enter

  • Instale la última versión de NVM:

    cd ~/

  • Presione enter

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

  • Presione enter
  • En caso de que ya haya creado la carpeta .nvm anteriormente, verá el siguiente mensaje de error:

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

    De lo contrario, verá el proceso de clonación ejecutándose hasta que lo haya hecho.

  • Mira la última versión de NVM:

    cd ~/.nvm

  • Presione enter

    git checkout v0.34.0

    Obtendrá una respuesta similar a:

    HEAD is now at 3d9c31d v0.34.0

    La versión puede ser diferente en diferentes sistemas.

    ls

  • Presione enter

    . nvm.sh

  • Presione enter

    nvm list

  • Presione enter

    Verá las diferentes versiones de nodo instaladas en su máquina, puede haber algunos errores, no les preste atención.

    nvm ls-remote | tail -n9

  • Presione enter

    nvm list

  • Abra bash usando vim:

    vim ~/.bash_profile

  • Dentro del editor vim, presione: ipara ingresar INSERT modey comenzar una nueva línea. Si tiene algún error al editar, presione la ESCtecla y luego :q!para salir sin guardar.

    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

  • Presione la ESCtecla cuando termine de editar el archivo (verá que desaparece el modo INSERTAR).

  • Presione :wqpara guardar el archivo.
  • Presione enter

    nvm ls-remote | tail -n9

  • Presione enter e instale la última versión de nvm presentada:

    nvm install 12.6.0

  • Cuando finalice el proceso, verá: Now using node v12.6.0 (npm v6.9.0)

  • Puede verificar si la instalación se realiza correctamente presionando:

    node -vo npm -vdebería mostrarle las versiones de nvm y npm instaladas en su sistema.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.