NVM (Node Version Manager): qué es y cómo se usa
Un proyecto antiguo solo arranca con Node 22 y el nuevo pide Node 26. Desinstalar e instalar Node cada vez que cambias de proyecto es lento y acaba rompiendo algo.
nvm (Node Version Manager) es un gestor de versiones de Node.js: guarda varias versiones instaladas a la vez y con nvm use activas la que pide cada proyecto. El fichero .nvmrc de cada proyecto dice cuál es.
Qué es nvm y qué significa
nvm son las siglas de Node Version Manager, «gestor de versiones de Node». Es un programa de terminal que:
- Descarga e instala las versiones de Node.js que quieras, cada una con su propio npm.
- Las guarda separadas en tu carpeta de usuario (
~/.nvm), sin tocar el Node del sistema. - Cambia la versión activa en la terminal en la que estás trabajando.
El nvm original (nvm-sh/nvm en GitHub) funciona en Linux, macOS y en WSL dentro de Windows. Para Windows sin WSL existe nvm-windows, un proyecto distinto con otros comandos; lo ves más abajo.
Instalar nvm en Linux y macOS
Qué necesitas
Solo curl (o wget) para descargar el instalador. En una Debian o Ubuntu mínima:
sudo apt-get install -y curl ca-certificates
Si sabes que vas a compilar Node desde el código fuente, añade build-essential y libssl-dev. Con la instalación normal no hacen falta, porque nvm descarga Node ya compilado. Tampoco es obligatorio git: el instalador usa git, curl o wget, el que encuentre.
Si prefieres instalar Node en Ubuntu sin nvm, tienes las demás opciones en instalar Node.js en Ubuntu.
Ejecuta el instalador
Copia el comando del README de nvm, que siempre lleva la última versión. Hoy es esta:
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.41.0/install.sh | bash
O con wget:
wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.41.0/install.sh | bash
El script descarga nvm en ~/.nvm y añade estas líneas a tu fichero de perfil (~/.bashrc, ~/.zshrc, ~/.profile…) para que nvm se cargue en cada terminal:
=> Downloading nvm as script to '/root/.nvm'
=> Appending nvm source string to /root/.bashrc
=> Appending bash_completion source string to /root/.bashrc
=> Close and reopen your terminal to start using nvm or run the following to use it now:
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
Si el script elige un fichero de perfil equivocado, indícale el correcto con la variable PROFILE:
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.41.0/install.sh | PROFILE=~/.bashrc bash
Comprueba que funciona
Cierra la terminal y abre otra. Después:
nvm --version # 0.41.0
Si responde nvm: command not found, el perfil no se ha cargado: abre otra terminal o ejecuta source ~/.bashrc (o tu fichero de perfil).
En macOS, la terminal usa zsh. Si no tienes ~/.zshrc, el instalador no sabe dónde escribir: créalo con touch ~/.zshrc y repite la instalación. Y no instales nvm con Homebrew: los propios autores dicen que esa vía no está soportada.
Para actualizar nvm, vuelve a ejecutar el mismo comando con la versión nueva.
Instalar nvm en Windows (nvm-windows)
En Windows nativo (CMD o PowerShell) el nvm original no funciona. Su alternativa es NVM for Windows (antes coreybutler/nvm-windows), un proyecto distinto. Su propio README lo advierte: «NVM for Windows is not the same thing as nvm!». Su versión estable es la 2.0.1, una reescritura completa.
- Descarga el instalador de la página de versiones:
nvm-2.0.1-x64-setup.exe(oarm64si tu equipo es ARM). También puedes usarwinget install nvm-windows. - Instálalo con tu usuario normal, no como administrador: si no, se configura para la cuenta de administrador.
- Si ya tenías Node instalado, el instalador lo adopta por defecto: copia esa versión y tus paquetes globales, y desinstala la oficial.
- Abre una terminal nueva e instala Node con
nvm install lts.
Los comandos se parecen pero no son iguales. Por ejemplo, en nvm-windows la última LTS es nvm install lts (sin guiones) y nvm use 24 deja esa versión como predeterminada. Para fijar la versión de un proyecto tiene nvm pin, que escribe el .nvmrc. Si usas WSL, instala el nvm original dentro de WSL, como en Linux.
Comandos de nvm: install, use, ls y alias
Escribe nvm sin nada más para ver la ayuda con todos los comandos:
nvm
Node Version Manager
Note: <version> refers to any version-like string nvm understands. This includes:
- full or partial version numbers, starting with an optional "v" (0.10, v0.1.2, v1)
- default (built-in) aliases: node, stable, unstable, iojs, system
- custom aliases you define with `nvm alias foo`
Any options that produce colorized output should respect the `--no-colors` option.
Usage:
nvm --help Show this message
nvm --version Print out the installed version of nvm
nvm install [-s] <version> Download and install a <version>, [-s] from source. Uses .nvmrc if available
--reinstall-packages-from=<version> When installing, reinstall packages installed in <node|iojs|node version number>
--lts When installing, only select from LTS (long-term support) versions
--lts=<LTS name> When installing, only select from versions for a specific LTS line
--skip-default-packages When installing, skip the default-packages file if it exists
--latest-npm After installing, attempt to upgrade to the latest working npm on the given node version
nvm uninstall <version> Uninstall a version
nvm uninstall --lts Uninstall using automatic LTS (long-term support) alias `lts/*`, if available.
nvm uninstall --lts=<LTS name> Uninstall using automatic alias for provided LTS line, if available.
nvm use [--silent] <version> Modify PATH to use <version>. Uses .nvmrc if available
--lts Uses automatic LTS (long-term support) alias `lts/*`, if available.
--lts=<LTS name> Uses automatic alias for provided LTS line, if available.
nvm exec [--silent] <version> [<command>] Run <command> on <version>. Uses .nvmrc if available
--lts Uses automatic LTS (long-term support) alias `lts/*`, if available.
--lts=<LTS name> Uses automatic alias for provided LTS line, if available.
nvm run [--silent] <version> [<args>] Run `node` on <version> with <args> as arguments. Uses .nvmrc if available
--lts Uses automatic LTS (long-term support) alias `lts/*`, if available.
--lts=<LTS name> Uses automatic alias for provided LTS line, if available.
nvm current Display currently activated version
nvm ls List installed versions
nvm ls <version> List versions matching a given <version>
nvm ls-remote List remote versions available for install
--lts When listing, only show LTS (long-term support) versions
nvm ls-remote <version> List remote versions available for install, matching a given <version>
--lts When listing, only show LTS (long-term support) versions
--lts=<LTS name> When listing, only show versions for a specific LTS line
nvm version <version> Resolve the given description to a single local version
nvm version-remote <version> Resolve the given description to a single remote version
--lts When listing, only select from LTS (long-term support) versions
--lts=<LTS name> When listing, only select from versions for a specific LTS line
nvm deactivate Undo effects of `nvm` on current shell
nvm alias [<pattern>] Show all aliases beginning with <pattern>
nvm alias <name> <version> Set an alias named <name> pointing to <version>
nvm unalias <name> Deletes the alias named <name>
nvm install-latest-npm Attempt to upgrade to the latest working `npm` on the current node version
nvm reinstall-packages <version> Reinstall global `npm` packages contained in <version> to current version
nvm unload Unload `nvm` from shell
nvm which [current | <version>] Display path to installed node version. Uses .nvmrc if available
nvm cache dir Display path to the cache directory for nvm
nvm cache clear Empty cache directory for nvm
Example:
nvm install 8.0.0 Install a specific version number
Esta salida es de una versión anterior de nvm y está recortada al final; los comandos básicos no han cambiado.
Instala la última LTS
nvm install --lts
LTS (Long Term Support) es la versión con soporte largo: la recomendable para trabajar. La primera versión que instalas queda como predeterminada:
Installing latest LTS version.
Downloading and installing node v26.13.0...
Downloading https://nodejs.org/dist/v26.13.0/node-v26.13.0-linux-x64.tar.gz...
Computing checksum with sha256sum
Checksums matched!
Now using node v26.13.0 (npm v11.20.0)
Creating default alias: default -> lts/* (-> v26.13.0 *)
Instala otra versión
Basta con el número principal; nvm elige la última de esa rama:
nvm install 22
Downloading and installing node v22.23.4...
Now using node v22.23.4 (npm v10.9.9)
Puedes instalar todas las que quieras. Para ver cuáles hay disponibles, usa nvm ls-remote (todas) o nvm ls-remote --lts (solo las LTS):
v24.22.2 (Latest LTS: Krypton)
-> v26.13.0 * (Latest LTS: Lithium)
Mira las que tienes instaladas
nvm ls
-> v22.23.4 *
v26.13.0 *
La flecha -> marca la versión activa. nvm current muestra solo esa.
Cambia de versión
nvm use 26
Now using node v26.13.0 (npm v11.20.0)
El cambio solo afecta a la terminal en la que lo haces. En otra pestaña sigue la versión predeterminada.
Elige la versión predeterminada
Para que cada terminal nueva arranque con una versión concreta:
nvm alias default 26
default -> 26 (-> v26.13.0 *)
Al abrir otra terminal, node -v responde v26.13.0.
Desinstala una versión
nvm uninstall 22
nvm no deja borrar la versión que está activa: cambia antes a otra con nvm use.
Compila Node desde el código fuente
nvm install -s 22
La opción -s se salta la descarga del binario y compila Node en tu equipo. Es mucho más lenta y necesita build-essential y libssl-dev. Solo compensa si quieres personalizar la compilación o si no hay binario oficial para tu sistema.
Lleva tus paquetes globales a otra versión
Cada versión de Node tiene sus propios paquetes globales (los que instalas con npm install -g). Para llevarlos a la versión nueva al instalarla:
nvm install --lts --reinstall-packages-from=22
Now using node v26.13.0 (npm v11.20.0)
Reinstalling global packages from v22.23.4...
Si las dos versiones ya están instaladas, cambia a la de destino y ejecuta nvm reinstall-packages 22.
Una versión por proyecto con .nvmrc
El fichero .nvmrc va en la raíz del proyecto y contiene solo la versión de Node. Guárdalo en Git y todo el equipo usará la misma:
node -v > .nvmrc # guarda la versión activa, por ejemplo v26.13.0
También puedes escribir 22 o lts/*. Después, dentro del proyecto, nvm use (y nvm install) sin número leen el fichero:
$ nvm use
Found '/tmp/mi-proyecto/.nvmrc' with version <v26.13.0>
Now using node v26.13.0 (npm v11.20.0)
Si quieres que el cambio sea automático al entrar en la carpeta, el README de nvm trae un script para bash y zsh en Deeper Shell Integration.
La versión de Node también es parte del proyecto.
Alternativas a nvm
La página de descarga de Node.js ofrece nvm como opción recomendada en Linux y macOS, y fnm (Fast Node Manager) como recomendada en Linux, macOS y Windows. fnm hace lo mismo que nvm, también lee .nvmrc y funciona igual en los tres sistemas. Si trabajas en varios sistemas y quieres los mismos comandos en todos, es una opción a valorar.
Tu chuleta
| Quiero… | nvm (Linux, macOS, WSL) | nvm-windows |
|---|---|---|
| Instalar la última LTS | nvm install --lts |
nvm install lts |
| Instalar una versión | nvm install 22 |
nvm install 22 |
| Ver las instaladas | nvm ls |
nvm ls |
| Cambiar de versión | nvm use 22 |
nvm use 22 |
| Fijar la predeterminada | nvm alias default 22 |
nvm use 22 |
| Versión del proyecto | node -v > .nvmrc y nvm use |
nvm pin |
Para que tu servidor se reinicie solo al guardar cambios, mira reinicio automático con node –watch o nodemon.
Fuentes
Comprobado el 7 de noviembre de 2026 en la documentación oficial:
- README de nvm-sh/nvm (v0.41.0, publicada el 4 de noviembre de 2026): instalación,
PROFILE, macOS, Homebrew,.nvmrc,-s,--reinstall-packages-fromyreinstall-packages. - README de NVM for Windows (v2.0.1) y su documentación: instaladores,
nvm install,nvm useynvm pin. - Página de descarga de Node.js (Node 26.13.0 LTS) y su lista de métodos de instalación en el repositorio de nodejs.org.
- README de fnm (v1.39.0): soporte de Linux, macOS y Windows, y de
.nvmrc. - BUILDING.md de Node.js 26: requisito de
libatomicen Linux desde Node 25.
Los comandos de Linux se han ejecutado con nvm 0.41.0 en un contenedor debian:stable (Debian 13.7), con Node 26.13.0 (npm 11.20.0) y Node 22.23.4 (npm 10.9.9); las salidas son reales. Los comandos de nvm-windows no se han ejecutado: están comprobados solo en su documentación.