Al momento de utilizar Node.js, una utilidad que resulta muy buena es NVM o Node Version Manager, es una magnífica herramienta para programadores y administradores de sistemas que trabajan con Node.js, sobre todo si requieren trabajar con varias versiones diferentes de Node.js.
Su función principal es administrar las diferentes versiones de Node.js instaladas en un mismo sistema, lo cual facilita el despegue de varios proyectos en un mismo servidor, que pueden requerir cada uno versiones diferentes de Node.js, lo cual puede deberse a necesitar distintas dependencias o requisitos de compatibilidad. Al permitir la instalación y cambio rápido entre diferentes versiones de Node.js, NVM ofrece un entorno de desarrollo más simple y potente.
Contenido
¿Qué es exactamente Node.js?
Node.js es un entorno de ejecución JavaScript que posibilita a los programadores desarrollar diferentes tipos de aplicaciones web utilizando el mismo lenguaje tanto en frontend como en backend; está construido a partir en el motor de JavaScript V8 de Google Chrome.
Este lenguaje usa de forma nativa un enfoque orientado a eventos, a diferencia de otros que se logra a través de librerías externas, en el caso de Node.js lo hace directamente a través del propio lenguaje que ya brinda la forma de hacerlo evitando dependencias externas, lo convierte en una muy buena opción para proyectos que deban soportar mucha cantidad de conexiones y/o de alto tráfico en tiempo real, esta ventaja le permite a Node.js manejar miles de peticiones de manera mucho más eficiente que otros lenguajes más tradicionales orientados a la web, como ya vimos en nuestro artículo sobre Node.js vs PHP.
Entre los diferentes beneficios de utilizar Node.js es que permite al programador utilizar JavaScript no solo utilizar JavaScript en el frontend, sino también en el backend, al tener la oportunidad de implementar el mismo tipo de lenguaje se torna mucho más rápido y sencillo todo el ciclo de vida del proyecto, desde el desarrollo hasta el mantenimiento posterior de las aplicaciones, sin ninguna duda es una gran ventaja poder utilizar un mismo lenguaje en todo proyecto de software.
Sin embargo, este entorno de desarrollo tan uniforme también tiene inconvenientes debido a que hoy día el software ya no es un monolito como antes, y está dividió en microservicios, es decir un proyecto de software se suele dividir en varios subproyectos y estos pueden tener requerimientos diferentes, por ejemplo diferentes frameworks o librerías que se requieran implementar, debido a eso pueden requerir simultáneamente diferentes dependencias, por ejemplo diferentes versiones de Node.js y allí es donde entra en juego NVM.
¿Qué es NVM?
Como mencionamos antes, NVM es un software que permite gestionar en un mismo equipo diferentes versiones de Node.js, es decir que lo que más destaca del mismo es su capacidad para brindar aislamiento donde cada proyecto puede tener su propia versión de Node.js y sus propias dependencias, lo que si dudas ayuda a prevenir conflictos y problemas de compatibilidad entre los diferentes proyectos.
Además simplifica el proceso de actualización de Node.js y NPM, al permitir que los programadores puedan cambiar fácilmente las versiones de un proyecto, lo que garantiza que puedan aprovechar las últimas características y mejoras sin afectar a proyectos existentes.
Una ventaja sumamente importante de NVM es su compatibilidad multiplataforma, funciona en Linux, macOS y Windows, lo que permite a desarrolladores trabajar en sus propios entornos de la misma forma semejante y lo más parecida posible, a como se haría en producción, independiente que los sistemas operativos sean diferentes, sin dudas esta compatibilidad facilita enormemente el desarrollo y posterior despliegue.
Para resumir, NVM es una opción sumamente atractiva, flexible y poderosa para simplificar la administración de versiones de diferentes versiones de Node.js, mejorando la productividad de los programadores al brindar un entorno de desarrollo más simple.
También es especialmente útil para los administradores de sistemas que tengan que mantener en producción diferente clases aplicaciones que dependan de Node,js, de la misma manera que los programadores necesitan un entorno de desarrollo flexible en el cual trabajar, los administradores necesitan dar soporte a aplicaciones muy variadas, cada una con necesidades y requerimientos muy diferentes.
Además, por eso Node Version Manager permite agregar nuevas versiones que se necesiten, sin afectar en lo más mínimo a aplicaciones que hayan corriendo y que dependan de versiones previas, es decir que agregan nuevas versiones en lugar de sustituir viejas lo cual brinda seguridad en el proceso de actualizaciones y posibilidad de dar marcha atrás si se necesita.
Instalación de NVM
Al momento de escribir este artículo la última versión disponible es la v0.39.7, sin embargo, es posible revisar nuevas versiones aquí, en cuanto a la instalación es muy sencilla tanto en Red Hat/CentOS/Alma Linux como en Ubuntu/Debian, para instalarlo simplemente se necesita ejecutar lo siguiente en la consola:
wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
El siguiente paso es recargar la configuración y para eso se ejecuta:
source ~/.bashrc
Para verificar que haya quedado correctamente instalado y configurado, ejecutamos.
nvm --version
Si todo está correcto, el próximo paso es instalar las versiones de node, por ejemplo para instalar la última versión estable de node se ejecuta:
nvm install node
A continuación vamos a ver cómo podemos instalar simultáneamente otras versiones que se necesiten.
Administrando las versiones de Node
En NVM existen diferentes comandos para verificar las versiones disponibles, instalarlas, desinstalarlas y cambiar entre las diferentes versiones, por ejemplo se puede verificar la variedad de versiones disponibles con el siguiente comando:
nvm ls-remote
El comando mostrará una larga lista conteniendo 768 versiones diferentes al momento de escribir este post, de las cuales aquí se muestran solo una parte:
[...] v19.9.0 v20.0.0 v20.1.0 v20.2.0 v20.3.0 v20.3.1 v20.4.0 v20.5.0 v20.5.1 v20.6.0 v20.6.1 v20.7.0 v20.8.0 v20.8.1 v20.9.0 (LTS: Iron) v20.10.0 (LTS: Iron) v20.11.0 (LTS: Iron) v20.11.1 (LTS: Iron) v20.12.0 (Latest LTS: Iron) v21.0.0 v21.1.0 v21.2.0
Para seleccionar e instalar cualquiera de ellas basta con escribir el nvm install [version], a modo de ejemplo, para instalar la versión v20.12.0 simplemente se ejecuta:
nvm install v20.12.0
El comando install se puede repetir tantas veces como versiones se necesiten instalar, para poder ver las versiones instaladas de forma simple se puede ejecutar usar el comando ls como veremos a continuación:
nvm ls
En la última captura no solo cambio la versión seleccionada, sino que la versión por defecto también cambio de color debido a que ahora si coincide con la versión por defecto, por lo que ambas aparecen en verde, con el código de colores se puede saber rápidamente la versión seleccionada y las disponibles.
Uno de los principales motivos para usar NVM es justamente poder ejecutar varios proyectos con versiones diferentes, para eso simplemente usamos el parámetro use antes de correr la aplicación en node, por ejemplo:
nvm use v18.19.1 node test1.js & nvm use v21.7.1 node test2.js &
Es posible usar el comando use tantas veces como se necesita para cambiar de versión, solo afectara a los programas que se ejecuten posteriormente, los que ya se estén ejecutando continuara con las versiones de node con las que hayan sido lanzados.
Otros comandos útiles de NVM
Sin utilizar nvm ls, también es posible conocer la versión seleccionada mediante el comando current:
nvm current
Especialmente útil al momento de automatizar algún proceso, algún script o algún deploy, también disponemos de uninstall para remover versiones que ya no interesan, ya sea porque son versiones viejas como para mantener el servidor saludable sin dependencias innecesarias o simplemente para liberar espacio, para remover una versión, la v8.1.3 a modo de ejemplo, se ejecuta:
nvm uninstall v8.1.3
Simplemente, se debe cambiar por la versión que se quiera eliminar. Tambien existe un comando util para desactivar los cambios realizados con use y volver a la versión por defecto:
nvm deactivate
Siguiendo uno de los ejemplos anteriores se puede implementar:
nvm use v21.7.1 node test2.js & nvm deactivate
Es decir, se asigna una versión que nos interese, se ejecuta lo que se necesite y se vuelve a la versión por defecto, si bien no es obligatorio si se considera una práctica recomendable
Conclusión
En el artículo de hoy hemos visto que NVM es una herramienta que podemos encontrar como una solución bastante conveniente a un problema para manejar múltiples versiones de Node.js en un mismo sistema, ofreciendo una forma simple de administrar los diferentes requerimientos de versiones entre diferentes proyectos.
NVM ayuda a evitar posibles conflictos de dependencias que no siempre son fáciles de resolver, además su capacidad de manejar diferentes versiones de Node.js y sus dependencias de manera bastante eficiente mejora no solo la productividad de los programadores al simplificar enormemente el entorno de desarrollo en el cual trabajan, sino que también es una forma sencilla y práctica de administrar en producción ambientes para aplicaciones de diferentes dependencias.