¿Qué es NVM?

¿Qué es NVM?

NVM (Node Version Manager) es un manejador de versiones de Node.js. Para refrescar un poco la definición, recordemos que Node.js es un entorno de tiempo de ejecución de JavaScript orientado a eventos asíncronos, que sirve para construir aplicaciones network escalables.

A continuación podrás ver un ejemplo en el cual creamos un servidor con Node.js que escuchará el puerto 3000 y simplemente retornará “Hola Mundo” a todas las solicitudes que le hagan.

Puedes leer más sobre Node.js aquí.

Para correr el siguiente ejemplo debes contar con, al menos, una versión de Node.js instalada en tu ordenador. La mejor manera de saber si ya tenemos Node.js instalado es ejecutar el siguiente comando en consola:

$ node --version

Si está instalado, nos debería informar la versión que tenemos.

Ahora ya estás en condiciones de entender cuál es el propósito de Node Version Manager. Supongamos que tienes dos aplicaciones que corren en Node.js, pero ambas funcionan con diferentes versiones de Node.js.

Una forma no muy práctica sería instalar Node.js cada vez que la versión correspondiente a la requerida por la aplicación sea diferente a la que ya tenemos instalada en el ordenador. De esta manera, podríamos ejecutar la aplicación.
Aquí está el propósito de NVM, ya que al momento de ejecutar una aplicación en Node.js, ésta requiere que contemos con una versión específica instalada en nuestro ordenador.

Uno de los beneficios al usar NVM es que permite contar con varias versiones distintas de Node.js instaladas en un mismo ordenador, sin la necesidad de reinstalarlas cada vez que se requieran. Además, permite intercambiar la versión de Node.js activa en un momento dado con todas las instaladas en el sistema. Para ser más preciso, “todas las versiones instaladas” dentro de NVM.

¿Existe algo parecido a NVM en otros lenguajes?

NVM se asemeja al administrador de versiones de Ruby (RVM), una herramienta de línea de comandos que instala, administra y trabaja fácilmente con múltiples entornos Ruby. RVM facilita agregar, eliminar o tener múltiples versiones de Ruby y sus bibliotecas en tu directorio de usuario.

De igual forma, NVM se asemeja al administrador de versiones de Python (Pyenv) con el que es posible switchear entre múltiples versiones de Python, haciendo posible setear una única versión global de Python por usuario.

¿Cómo es la instalación de NVM?

NVM se instala como cualquier otro software, dependiendo del sistema operativo instalado.

Instalación de NVM en Mac

Para instalar NVM en Mac es necesario contar con Homebrew. Se aconseja alojarlo dentro de ‘/usr/local', a través del siguiente comando:

Si quieres seguir la documentación, ingresa aquí.

Ahora ya puedes instalar NVM en tu Mac con homebrew. Hay dos maneras: de forma rápida o la recomendada.

De manera rápida:

De la manera recomendada:

1) Instalar NVM.

2) Crear sistema de directorio para NVM.

3) Agregar la siguiente línea a tu profile:  Alternativas .profile, .zshrc o .zprofile.

4) Una vez abierto el archivo, ingresa las siguientes líneas:

Nota: Posteriormente subiré un artículo explicando la instalación en Ubuntu y Windows.



NVM en práctica

Volvamos al ejemplo anterior donde contamos con dos aplicaciones de Node.js que requieren de diferentes versiones.

Imaginemos que tenemos una aplicación A que requiere la versión 8.1.4 y una aplicación B que requiere la versión 18.2.0.

Para simular este ejemplo, primero deberíamos saber cuáles versiones de Node.js tenemos instaladas con NVM. A continuación explicaré cómo saber esto.

Ejecutemos el siguiente comando:

Obtendremos algo así:

La primera lista que se puede ver son las versiones instaladas en nuestro ordenador desde NVM. Además, nos indica cuál es la versión seleccionada con la cual el ordenador ejecutará Node.js. En mi caso, es la versión 16.14.2.

Luego nos indica cuál es la versión que el sistema operativo tomará por defecto cada vez que el ordenador reinicie.

Por último, nos muestra una lista de diferentes tipos de versiones de Node.js disponibles para instalar. Estas son de tipo lts, unstables y stables.

En un próximo artículo explicaré más sobre las mismas.

Continuemos con el ejemplo. Asumamos que deseamos ejecutar la aplicación A que requiere la versión 8.1.4.

Si no contamos con esta versión al listar las versiones instaladas de NVM, tenemos que instalarla con el siguiente comando:

Para continuar, debemos indicarle a NVM que vamos a usar la versión 8.1.4 con el siguiente comando:

Con lo anterior, obtendremos algo así:

Si queremos asegurarnos, podemos volver a ejecutar el comando anterior nvm ls.

Podemos ver que la versión 8.1.4 es la seleccionada por NVM, lo que significa que es la que usará el sistema operativo al momento de ejecutar la aplicación A.

Lo que sigue es posicionarnos en el directorio root de la aplicación A y confirmar que exista el archivo package.json. Posteriormente, deberíamos correr npm start, el comando que viene por defecto en nuestro package.json.

¡Excelente! Si llegaste hasta aquí deberías llenarte de orgullo porque acabas de ejecutar tu primera aplicación desde NVM. Ahora ejecutaremos la aplicación B. Para ello, debemos seguir los mismos pasos que hicimos con la aplicación A.

Primero, nos aseguramos de que tenemos la versión 18.2.0 instalada en NVM y luego indicaremos a NVM que vamos a usar esa versión con el siguiente comando:

Si no fue instalada previamente, al intentar seleccionarla lanzará un mensaje de error similar a éste:

Lo que debemos hacer es simplemente instalarla y volver a seleccionarla.


Posteriormente, nos posicionamos en el directorio root de la aplicación B y ejecutamos npm start.

¡Felicitaciones! Acabas de ejecutar tu segunda aplicación desde NVM.

Si quisiéramos ejecutar nuevamente estas aplicaciones, no sería necesario que instalemos nuevamente las versiones requeridas por las aplicaciones por estar ya guardadas en NVM.

Conclusión

NVM resulta muy práctico si necesitamos alternar entre diferentes versiones de Node.js, sea para ejecutar diferentes aplicaciones o para hacer pruebas en una misma aplicación, ejecutándola con diferentes versiones de Node.js.

Si intentáramos simular el mismo ejemplo que hicimos pero en un ambiente de Node.js sin NVM, entonces tendríamos que instalar la versión de Node.js requerida por cada aplicación cada vez que éstas sean ejecutadas. ¿Lo ves?

¡Hasta luego!

⚠️
Las opiniones y comentarios emitidos en este artículo son propiedad única de su autor y no necesariamente representan el punto de vista de Revelo.

Revelo Content Network da la bienvenida a todas las razas, etnias, nacionalidades, credos, géneros, orientaciones, puntos de vista e ideologías, siempre y cuando promuevan la diversidad, la equidad, la inclusión y el crecimiento profesional de los profesionales en tecnología.