Gestionar versiones de Node.js con NVM
Al trabajar en varios proyectos al mismo tiempo, es muy común que necesitemos distintas versiones del mismo lenguaje de programación, ya sea Python, Node.js o PHP, entre otros.
A veces necesitamos saber cómo instalar la versión 18 de Node.js, o cómo instalar la versión 16 de Node.js. Y lo que está claro es que no podemos usar la misma versión de Node.js para todos los proyectos porque lo más seguro es que rompamos algo. Para solucionar esto, vamos a ver una solución muy útil y sencilla con NVM para trabajar con diferentes versiones de Node.js dependiendo del proyecto en el que estemos.
Cómo instalar múltiples versiones de Node.js
NVM (Node Version Manager) nos permite instalar y utilizar diferentes versiones de Node.js a través de la línea de comandos.
Es posible cambiar la versión de Node.js ejecutando un simple comando de NVM
$ nvm use 16
Now using node v16.9.1 (npm v7.21.1)
$ node -v
v16.9.1
$ nvm use 14
Now using node v14.18.0 (npm v6.14.15)
$ node -v
v14.18.0
$ nvm install 12
Now using node v12.22.6 (npm v6.14.5)
$ node -v
v12.22.6
Cómo instalar NVM
👉 Este repositorio de NVM sólo funciona en Linux o Mac. Para Windows hay una alternativa más abajo.
Lo más sencillo es ir al repositorio de NVM y ejecutes el comando curl
o wget
que se indica para la instalación:
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh | bash
Cómo instalar NVM en Windows
En Windows hay un repositorio alternativo que podemos usar, aunque en mi caso particular, siempre utilizo el subsistema de Linux en Windows, así que el repositorio oficial de NVM serviría.
Cómo usar NVM
Utilizar NVM es realmente sencillo y se puede usar para instalar la última versión de Node o versiones específicas.
Instalar la última versión de Node.js
Si solo espedificamos la palabra node
, instalará la última versión.
nvm install node
Instalar una versión específica de Node.js
Podemos especificar el número de versión a instalar. Es importante recordar que la versión por defecto en nuestro ordenador va a ser la primera que hayamos instalado, pero no hay problema porque podemos cambiar la versión de Node.js.
nvm install 19.7.0
nvm install 19 # Para instalar la última de la 19
Listar las versiones de Node.js instaladas
nvm ls-remote
Utilizar una versión específica de Node.js
Con nvm use
podemos especificar el número de versión que necesitemos usar.
nvm use 19.7.0
Desinstalar una versión de Node.js
Con el comando nvm uninstall
desinstalaremos una versión específica.
nvm uninstall 19.7.0
Usar NVM en múltiples proyectos
Aquí es donde viene la magia. ✨✨✨
Está muy bien poder cambiar la versión de Node.js en función del proyecto, pero sería más sencillo hacerlo de manera automática y que no tengamos que saber qué versión de Node.js está utilizando cada proyecto.
Para hacer esto, podemos empezar por crear un archivo llamado .nvmrc
en la raíz de nuestro proyecto que simplemente contendrá la versión de Node.js que utiliza este proyecto. Este sería el contenido de .nvmrc
:
19.7.0
Cuando entremos al proyecto, simplemente habría que ejecutar un comando para que lea este archivo y utilice esa versión específica de Node.js:
nvm use # Sin especificar la versión utilizará el .nvmrc
Cómo cambiar la versión de Node.js automáticamente
Por ahora estamos simplificando mucho el proceso. Con un simple archivo y un comando somos capaces de cambiar la versión de Node.js, pero se puede hacer más sencillo todavía.
Añadiendo un poco de código en nuestro fichero .bashrc
o .zshrc
, nuestra consola va a detectar automáticamente si existe un archivo .nvmrc
y cambiará la versión de Node.js automáticamente al entrar a la raíz del proyecto.
En el caso de zsh, para ejecutar nvm use
en un directorio con un archivo nvmrc
tendremos que añadir lo siguiente a nuestro archivo $HOME/.zshrc
:
# place this after nvm initialization!
autoload -U add-zsh-hook
load-nvmrc() {
local nvmrc_path="$(nvm_find_nvmrc)"
if [ -n "$nvmrc_path" ]; then
local nvmrc_node_version=$(nvm version "$(cat "${nvmrc_path}")")
if [ "$nvmrc_node_version" = "N/A" ]; then
nvm install
elif [ "$nvmrc_node_version" != "$(nvm version)" ]; then
nvm use
fi
elif [ -n "$(PWD=$OLDPWD nvm_find_nvmrc)" ] && [ "$(nvm version)" != "$(nvm version default)" ]; then
echo "Reverting to nvm default version"
nvm use default
fi
}
add-zsh-hook chpwd load-nvmrc
load-nvmrc
En el caso de bash, puedes ver el snippet aquí.
Y con esto, ¡ya no tendremos que acordarnos de cambiar la versión de Node.js manualmente en ningún proyecto! 🥳🥳🥳