Instalar Node en un servidor Linux es una tarea relativamente trivial y en pocos minutos podemos pasar de tener un servidor completamente en limpio a tener un entorno adecuado para ejecutar aplicativos que dependen de Node para funcionar. Lo que poco se habla sin embargo es cuando en el pasado hemos configurado correctamente un entorno con Node pero nos hemos quedado rezagados con respecto a la versión estable y por azares del destino una dependencia hace que sea necesario actualizar a la versión más reciente.

Si bien podríamos tomar la ruta larga y ligeramente riesgosa de desinstalar completamente Node y volver a instalar pero esta vez con la versión objetivo, existe una forma muchísimo más elegante de hacerlo. Se trata de NVM, abreviación para Node Version Manager, una herramienta que nos permite tener más de una versión instalada al mismo tiempo y poder switchear en tiempo real entre distintas versiones. Esto es particularmente útil también para quienes por alguna razón necesitan testear o ejecutar varios aplicativos contra versiones distintas de Node en un mismo servidor.

Instalando NVM

El primer paso lógicamente es instalar NVM. En nuestra consola ejecutamos el siguiente comando:

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

Si todo ha transcurrido con normalidad veremos un resultado similar a esto:

En este punto es indispensable reiniciar la sesión de SSH con la que estamos trabajando para que los cambios surtan efecto o bien agregar manualmente el path a nuestra sesión actual. Si intentamos verificar la instalación sin realizar estos pasos obtendremos el siguiente error:

Agregamos manualmente al path con los siguientes comandos (una línea a la vez):

export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"

Si intentamos verificar la instalación en este punto obtendremos un resultado mejor que hace unos instantes:

Instalando Node mediante NVM

Ahora que NVM se encuentra instalado en nuestro sistema podemos instalar Node directamente utilizando el siguiente comando:

nvm install node

Este comando instalará de forma muy conveniente la última versión oficial estable disponible:

Incluso nos ha creado un alias que redirecciona automáticamente a la versión recién instalado. ¿Qué significa un alias? Si intentamos verificar la versión de Node de forma manual veremos que caza perfectamente con la versión que NVM instaló por nosotros:

Instalar más de una versión de Node

Como explicaba al inicio, existen escenarios donde es posible que necesitemos utilizar una versión legacy o que no está tan actualizada y necesitamos hacerlo en el mismo servidor donde existen ya otros aplicativos que dependen de una versión más reciente. Es acá donde NVM realmente empieza a brillar.

Supongamos que teniendo la versión más reciente necesitamos tener una copia de la versión LTS (Long Term Support), que actualmente es la versión 12.18.4. Podemos instalarlo con cualquiera de los dos comandos siguientes:

# Utilizando el flag --lts
nvm install --lts

# Utilizando la versión específica
nvm install 12.18.4

Puesto que ahora existe más de una versión de Node en mi servidor, deseo listar todas las versiones existentes. Lo puedo hacer mediante el siguiente comando:

nvm ls

Puesto que la versión 12.18.4 es la última que instalé, es la que se encuentra seleccionada actualmente. Para moverme entre versiones basta con utilizar el comando use con el número de versión que quiero establecer:

nvm use 14.12.0

Conclusión

Hago la salvedad de que NVM se instala a nivel de sesión SSH. Todos los cambios que realizamos acá no se instalan de manera global en el servidor, son visibles únicamente para el usuario en sesión. Claro, puedes cerrar sesión y al regresar NVM seguirá funcionando pero estos cambios existen únicamente para el usuario en sesión. Si tienes un PM2 o algún otro proceso que se encarga de mantener vivos tus procesos de manera permanente en el servidor y éstos se ejecutan con otro usuario (el usuario root, por ejemplo), dicho usuario no podrá ver las versiones que otro usuario ha instalado mediante NVM.