Reiniciar automáticamente las aplicaciones de nodo en el cambio de archivo con nodemon

En este breve tutorial, aprenda cómo reiniciar las aplicaciones Node/JavaScript automáticamente cuando cambia un archivo fuente con Nodemon.

Introducción

Nodemon es un paquete de utilidades de código abierto que realiza un seguimiento de los cambios realizados en su código fuente y reinicia su servidor de proyectos automáticamente cuando se realizan nuevas modificaciones.

También ofrece algunas características únicas, como la capacidad de ver un directorio en lugar de simplemente archivos, así como ignorar archivos particulares que pueden estar presentes en un directorio determinado.

En esta guía, veremos cómo integrar Nodemon en sus proyectos de Node, para aliviar la molestia de reiniciar sus proyectos cada vez que realiza un cambio y aumentar la velocidad de desarrollo.

¿Por qué Nodemon?

Tradicionalmente, cuando ejecutamos aplicaciones Node, usamos el comando node junto con el nombre del archivo:

1
$ node app.js

Esto, bueno, ejecuta la aplicación Node al cargar los archivos más recientes y sus estados más nuevos, y usarlos tal como están. Este estado reside y persiste en la memoria mientras se ejecuta la aplicación, por lo que incluso si modifica los archivos de origen, esto no se refleja en la aplicación que se está ejecutando actualmente.

Una vez que detiene la aplicación, el contenido original de los archivos se libera de la memoria y el estado se pierde hasta que lo carga nuevamente ejecutando la aplicación. Si ha cambiado los archivos, se utiliza el nuevo estado y la aplicación se actualiza cuando se ejecuta de nuevo.

Durante el desarrollo, normalmente iniciamos y detenemos las aplicaciones muchas veces para "probar" si algo que escribimos funciona como se esperaba. Estos son a menudo pequeños cambios, como cambiar el color de un botón o agregar un elemento en una posición determinada. Rápidamente, se vuelve molesto tener que reiniciar todo el proyecto para pequeños cambios durante el desarrollo.

Nodemon alivia esta molestia, reiniciando y actualizando automáticamente su proyecto cada vez que realiza un cambio en los archivos fuente, sin tener que reiniciar explícitamente el proyecto.

Instalación de Nodemon {#instalación de Nodemon}

La forma más rápida de comenzar con Nodemon es instalarlo como un paquete npm global:

1
$ npm install -g nodemon

También puede instalar Nodemon como una dependencia de desarrollo para un solo proyecto:

1
$ npm install --save-dev nodemon

Primeros pasos con Nodemon {#empezando con Nodemon}

Una vez que el paquete está instalado, se puede usar en lugar del comando nodo cuando se ejecuta un proyecto. En su lugar, puede usar el comando wrapper nodemon, que seguramente ejecuta la aplicación tal como lo hace node, pero también realiza un seguimiento de los archivos en el directorio y activa un reinicio cada vez que se modifican los archivos.

{.icon aria-hidden=“true”}

Nota: Si instala el paquete globalmente, el comando estará disponible globalmente. Si lo ha instalado para un proyecto, solo estará disponible en el directorio de su proyecto.

Digamos que tenemos un archivo, app.js, en el que generamos un número aleatorio y lo mostramos en la consola:

1
2
let randNo = Math.floor(Math.random() * 10);
console.log(randNo);

Luego podemos ejecutar este archivo con Nodemon:

1
2
3
4
5
6
7
8
$ nodemon app.js
[nodemon] 2.0.15
[nodemon] to restart at any time, enter `rs`
[nodemon] watching path(s): *.*
[nodemon] watching extensions: js,mjs,json
[nodemon] starting `node app.js`
6
[nodemon] clean exit - waiting for changes before restart

{.icon aria-hidden=“true”}

Nota: Si encuentra un error: nodemon: comando no encontrado - ejecútelo a través de npx.

1
2
3
4
5
6
7
8
$ npx nodemon app.js
[nodemon] 2.0.15
[nodemon] to restart at any time, enter `rs`
[nodemon] watching path(s): *.*
[nodemon] watching extensions: js,mjs,json
[nodemon] starting `node app.js`
8
[nodemon] clean exit - waiting for changes before restart

Ahora, si tuviera que cambiar algo en el archivo y guardar el cambio para confirmarlo en el sistema de archivos, como agregar un espacio en blanco después de la última línea, tan pronto como guarde el archivo, el proyecto se reiniciará y otro , se mostrará el nuevo número:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
$ npx nodemon app.js
[nodemon] 2.0.15
[nodemon] to restart at any time, enter `rs`
[nodemon] watching path(s): *.*
[nodemon] watching extensions: js,mjs,json
[nodemon] starting `node app.js`
8
[nodemon] clean exit - waiting for changes before restart
[nodemon] restarting due to changes...
[nodemon] starting `node app.js`
6
[nodemon] clean exit - waiting for changes before restart

¡Aquí, recibimos información adicional! Nodemon está viendo archivos con ciertas extensiones: js, mjs y json. Además, está observando un determinado camino. Echemos un vistazo a cómo personalizar qué ruta observa Nodemon.

Ver directorios

El comando nodemon también admite un indicador --watch para ver diferentes directorios. Asumiendo que tenemos un directorio, app, que queremos que Nodemon monitoree, simplemente proporcionamos el directorio después del indicador --watch:

1
$ nodemon --watch app

Y si, por ejemplo, tenemos varios directorios como en la siguiente estructura:

1
2
3
4
5
app
views
utils
public/
  index.html

Podemos agregar el indicador --watch a cada directorio para incluirlos:

1
$ nodemon --watch app --watch views --watch utils --watch public

Ignorar archivos y directorio

También es posible indicarle a Nodemon que evite ver ciertos archivos y carpetas, lo cual es útil si no desea que Nodemon reinicie sus archivos prematuramente o con demasiada frecuencia, especialmente si un archivo se cambia mediante programación todo el tiempo, como un archivo de registro.

Podemos hacer esto con el indicador --ignore:

1
$ nodemon --ignore views/ --ignore public/index.js

Retraso en el reinicio {#retraso en el reinicio}

Si bien retrasar el reinicio no es muy común, hay momentos en los que los archivos que desea ver no están disponibles al instante, o un lote de archivos se actualiza sucesivamente. Para cada cambio, se emitirá un reinicio, lo que hará que su aplicación se reinicie varias veces.

Puede retrasar cuando Nodemon reacciona a un archivo modificado configurando el indicador --delay, seguido de un retraso en segundos:

1
$ nodemon --delay 5 app.js

Aquí, hemos agregado un retraso de 5 segundos (tiempo de espera) antes de que Nodemon reaccione a un cambio. Cualquier cambio realizado entre estos 5 segundos reiniciará el temporizador de retardo e ignorará los cambios realizados antes, ejecutando solo un reinicio para el último cambio.

También es posible especificar el retraso en milisegundos:

1
2
3
4
5
// Set delay for 10 seconds 50 milliseconds.
$ nodemon --delay 10.5 app.js

// Set delay for 2000 miliseconds.
$ nodemon --delay 2000ms app.js

Conclusión

Nodemon le permite automatizar el proceso de reiniciar las aplicaciones de Node cuando realiza cambios en los archivos subyacentes. Esto no es un problema per se, pero puede convertirse en una molestia al reiniciar una aplicación muchas veces durante el desarrollo.

Observa el directorio de origen en busca de cambios y reinicia sus aplicaciones de Node sin problemas y permite la personalización en el proceso.