Cómo Usar NVM con Fish Shell

Instala y configura nvm.fish para gestionar múltiples versiones de Node.js en Fish Shell. Cubre instalación, cambio de versiones, soporte de .nvmrc y versiones por defecto.

Cómo Usar NVM con Fish Shell

El nvm original (Node Version Manager) es un script de Bash. No funciona en Fish. Si intentas cargarlo con source en Fish, obtienes errores de sintaxis porque nvm depende de características POSIX shell que Fish deliberadamente no soporta.

La solución es nvm.fish — un gestor de versiones de Node separado, escrito completamente en Fish. Mismo concepto (instalar y cambiar entre versiones de Node), implementación diferente. Está hecho por la misma persona que creó Fisher, y funciona muy bien.

Instalar nvm.fish

Necesitas Fisher primero. Si no lo tienes:

curl -sL https://raw.githubusercontent.com/jorgebucaran/fisher/main/functions/fisher.fish | source && fisher install jorgebucaran/fisher

Luego instala nvm.fish:

fisher install jorgebucaran/nvm.fish

Eso es todo. No se necesita configuración adicional. Reinicia tu shell o abre una nueva pestaña de terminal.

Instalar versiones de Node

# Install the latest release
nvm install latest

# Install the latest LTS version
nvm install lts

# Install a specific version
nvm install 22
nvm install 20.11.0
nvm install v18.19.1

# Install an LTS line by codename
nvm install iron    # Node 20 LTS

nvm.fish descarga binarios precompilados de Node y los almacena en ~/.local/share/nvm/ (siguiendo la especificación XDG Base Directory). Cada versión tiene su propio directorio.

Cambiar entre versiones

# Use a specific version (current session only)
nvm use 22
nvm use lts
nvm use latest

# Check which version is active
nvm current

# List installed versions
nvm list

nvm use cambia la versión activa de Node para tu sesión actual del shell. Abre una nueva terminal y vuelve a la versión por defecto (o a lo que especifique .nvmrc para ese directorio).

Establecer una versión de Node por defecto

Sin una versión por defecto, las nuevas sesiones del shell no tendrán ningún Node gestionado por nvm en el PATH. Configúrala con una variable universal:

set --universal nvm_default_version v22

Ahora cada nueva sesión de Fish arranca con Node 22 activo. Puedes usar lts, latest o un número de versión específico.

Cambio automático de versión con .nvmrc

Esta es la función que más uso. Crea un archivo .nvmrc en el directorio raíz de un proyecto:

echo "20" > ~/projects/legacy-app/.nvmrc
echo "22" > ~/projects/new-app/.nvmrc

Cuando haces cd a un directorio con un archivo .nvmrc (o .node-version), nvm use lo lee automáticamente. Funciona recorriendo el árbol de directorios hacia arriba hasta encontrar el archivo.

cd ~/projects/legacy-app
node --version  # v20.x.x

cd ~/projects/new-app
node --version  # v22.x.x

Formatos de .nvmrc

nvm.fish soporta los mismos formatos de .nvmrc que el nvm original: números de versión (20, 20.11, 20.11.0), lts, latest y nombres clave de LTS (iron, hydrogen). Los archivos llamados .node-version también funcionan.

Instalar paquetes globales por defecto

Si quieres que ciertos paquetes npm se instalen cada vez que instalas una nueva versión de Node:

set --universal nvm_default_packages yarn typescript tsx

Ahora nvm install 22 también ejecutará npm install -g yarn typescript tsx después de descargar Node.

Desinstalar versiones de Node

nvm uninstall v18
nvm uninstall 20.11.0

Esto elimina los binarios instalados del directorio de datos de nvm.

Cambiar el mirror de descarga

Si necesitas usar un mirror (proxy corporativo, mirror de China, etc.):

set --universal nvm_mirror https://npmmirror.com/mirrors/node

El valor por defecto es https://nodejs.org/dist.

Cambiar el directorio de datos

Por defecto, nvm.fish almacena todo en ~/.local/share/nvm/. Cámbialo con:

set --global nvm_data ~/.nvm

Si antes usabas el nvm basado en Bash y tienes versiones de Node en ~/.nvm/, esto permite que nvm.fish use ese mismo directorio. Las versiones instaladas por cualquiera de las dos herramientas deberían funcionar.

nvm.fish vs nvm (la versión Bash)

nvm.fishnvm (Bash)
Soporte de shellSolo FishBash, Zsh
Escrito enFishBash/POSIX sh
InstalaciónPlugin de FisherScript con curl
Impacto en arranqueMínimo (carga diferida)Puede agregar 200-500ms
Soporte de .nvmrc
Completado con TabSí (nativo de Fish)Básico
Nombres clave LTS

La diferencia de rendimiento merece mencionarse. El nvm basado en Bash es conocido por ralentizar el arranque del shell porque necesita cargarse con source en cada nueva sesión. nvm.fish carga de forma diferida — solo se activa cuando realmente ejecutas nvm o cambias a un directorio con .nvmrc. No lo notarás en tu tiempo de arranque.

nvm.fish vs fnm vs Volta

Hay otros gestores de versiones de Node que funcionan con Fish:

fnm (Fast Node Manager) — escrito en Rust, funciona con cualquier shell. Es más rápido que nvm.fish para instalaciones porque usa descargas paralelas. Instálalo con brew install fnm o cargo install fnm, luego agrega fnm env --use-on-cd --shell fish | source a tu config.fish.

Volta — también basado en Rust, también cross-shell. Su principal diferenciador es la gestión de paquetes globales por proyecto. Instálalo con curl https://get.volta.sh | bash, luego agrega set -gx VOLTA_HOME ~/.volta; fish_add_path $VOLTA_HOME/bin a config.fish.

Yo uso nvm.fish porque es Fish puro, se integra con Fisher, y no necesito las funciones extra de fnm o Volta. Si usas múltiples shells, fnm o Volta son mejores opciones ya que funcionan en todos lados.

Solución de problemas

nvm: command not found — Fisher no se instaló correctamente, o tu shell no se ha recargado. Ejecuta fisher list para verificar si aparece jorgebucaran/nvm.fish. Prueba abriendo una nueva terminal.

Node no se encuentra después de instalar — Asegúrate de haber ejecutado nvm use <version> después de instalar. O configura una versión por defecto: set --universal nvm_default_version lts.

.nvmrc no se lee automáticamente — nvm.fish lee .nvmrc cuando ejecutas nvm install o nvm use sin argumentos. Para el cambio automático al hacer cd, asegúrate de usar una versión reciente de nvm.fish (fisher update jorgebucaran/nvm.fish).

Guías relacionadas