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.
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.fish | nvm (Bash) | |
|---|---|---|
| Soporte de shell | Solo Fish | Bash, Zsh |
| Escrito en | Fish | Bash/POSIX sh |
| Instalación | Plugin de Fisher | Script con curl |
| Impacto en arranque | Mínimo (carga diferida) | Puede agregar 200-500ms |
Soporte de .nvmrc | Sí | Sí |
| Completado con Tab | Sí (nativo de Fish) | Básico |
| Nombres clave LTS | Sí | Sí |
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
- Instalar Fish Shell en Ubuntu — configura Fish primero
- Fish Shell en macOS — configuración en Mac incluyendo Node con Homebrew
- Mejores plugins de Fish Shell — nvm.fish y otros plugins recomendados
- Guía de funciones en Fish Shell — crea tus propias funciones auxiliares para Node