nodemon es una herramienta que ayuda a desarrollar aplicaciones basadas en node.js reiniciando automáticamente la aplicación node cuando se detectan cambios de archivo en el directorio.

nodemon no requiere ningún cambio adicional en su código o método de desarrollo. nodemon es una envoltura de reemplazo para node. Para usar nodemon, reemplace la palabra node en la línea de comandos cuando ejecute su script.

Instalación

Ya sea a través de la clonación con git o mediante el uso de npm (la forma recomendada):

npm install -g nodemon

Y nodemon se instalará globalmente en la ruta de su sistema.

También puede instalar nodemon como una dependencia de desarrollo:

npm install --save-dev nodemon

Con una instalación local, nodemon no estará disponible en la ruta de su sistema. En su lugar, la instalación local de nodemon puede ser ejecutada llamándola desde un script npm (como npm start) o usando npx nodemon.

Uso

nodemon envuelve su aplicación, por lo que puede pasar todos los argumentos que normalmente pasaría a su aplicación:

nodemon 

Para las opciones de la CLI, utilice el argumento -h (o --help):

nodemon -h

Usar nodemon es sencillo, si mi aplicación aceptara un host y un puerto como argumentos, la iniciaría así:

nodemon ./server.js localhost 8080

Cualquier salida de este script lleva el prefijo , de lo contrario toda la salida de tu aplicación, errores incluidos, se emitirá como se espera.

Si no se da ningún script, nodemon probará un archivo package.json y si lo encuentra, ejecutará el archivo asociado a la propiedad principal (ref).

También puede pasar la bandera inspect a node a través de la línea de comandos como lo haría normalmente:

nodemon --inspect ./server.js 80

Si tiene un archivo package.json para su aplicación, puede omitir el script principal por completo y nodemon leerá el package.json para la propiedad main y usará ese valor como la aplicación.

nodemon también buscará la propiedad scripts.start en package.json (a partir de nodemon 1.1.x).

También revise las preguntas frecuentes o los problemas de nodemon.

Rejecución automática

nodemon fue escrito originalmente para reiniciar procesos colgados como servidores web, pero ahora soporta aplicaciones que salen limpiamente. Si su script sale limpiamente, nodemon continuará monitoreando el directorio (o directorios) y reiniciará el script si hay algún cambio.

Reinicio manual

Mientras nodemon se está ejecutando, si necesita reiniciar manualmente su aplicación, en lugar de parar y reiniciar nodemon, puede escribir rs con un retorno de carro, y nodemon reiniciará su proceso.

Archivos de configuración

nodemon soporta archivos de configuración locales y globales. Estos suelen llamarse nodemon.json y pueden estar ubicados en el directorio de trabajo actual o en su directorio personal. Se puede especificar un archivo de configuración local alternativo con la opción --config <file>.

La especificidad es la siguiente, de modo que un argumento de línea de comandos siempre anulará los ajustes del archivo de configuración:

  • argumentos de línea de comandos
  • configuración local
  • configuración global

Un archivo de configuración puede tomar cualquiera de los argumentos de línea de comandos como valores clave JSON, por ejemplo:

{ "verbose": true, "ignore": , "execMap": { "rb": "ruby", "pde": "processing --sketch={{pwd}} --run" }}

El archivo nodemon.json anterior podría ser mi config global para que tenga soporte para archivos ruby y archivos de procesamiento, y puedo ejecutar nodemon demo.pde y nodemon sabrá automáticamente cómo ejecutar el script aunque fuera de la caja soporte para procesar scripts.

Se puede ver otro ejemplo de opciones en sample-nodemon.md

package.json

Si quiere mantener todas las configuraciones de sus paquetes en un solo lugar, nodemon soporta el uso de package.json para la configuración.Especifique la configuración en el mismo formato que lo haría para un archivo de configuración pero bajo nodemonConfig en el archivo package.json, por ejemplo, tome el siguiente package.json:

{ "name": "nodemon", "homepage": "http://nodemon.io", "...": "... other standard package.json values", "nodemonConfig": { "ignore": , "delay": "2500" }}

Note que si usted especifica un archivo --config o proporciona un nodemon.json local cualquier package.json config es ignorado.

Esta sección necesita mejor documentación, pero por ahora puedes ver nodemon --help config (también aquí).

Usar nodemon como módulo

Por favor, ver doc/requireable.md

Usar nodemon como proceso hijo

Por favor, ver doc/events.md

Ejecutar scripts que no sean de nodemon

nodemon también puede ser usado para ejecutar y monitorear otros programas. nodemon leerá la extensión del archivo del script que se está ejecutando y monitorizará esa extensión en lugar de .js si no hay nodemon.json:

nodemon --exec "python -v" ./app.py

Ahora nodemon ejecutará app.py con python en modo verbose (tenga en cuenta que si no está pasando args al programa exec, no necesita las comillas), y buscará archivos nuevos o modificados con la extensión .py.

Ejecutables por defecto

Usando el archivo de configuración nodemon.json, puedes definir tus propios ejecutables por defecto usando la propiedad execMap. Esto es particularmente útil si estás trabajando con un lenguaje que no es soportado por defecto por nodemon.

Para añadir soporte para que nodemon conozca la extensión .pl (para Perl), el archivo nodemon.json añadiría:

{ "execMap": { "pl": "perl" }}

Ahora ejecutando lo siguiente, nodemon sabrá usar perl como ejecutable:

nodemon script.pl

Generalmente se recomienda usar el global nodemon.json para añadir sus propias opciones execMap. Sin embargo, si hay un valor predeterminado común que falta, esto puede ser fusionado en el proyecto para que nodemon lo soporte por defecto, cambiando default.js y enviando un pull request.

Monitorización de múltiples directorios

Por defecto nodemon monitoriza el directorio de trabajo actual. Si quiere tomar el control de esa opción, utilice la opción --watch para añadir rutas específicas:

nodemon --watch app --watch libs app/server.js

Ahora nodemon sólo se reiniciará si hay cambios en el directorio ./app o ./libs. Por defecto nodemon atravesará los subdirectorios, por lo que no es necesario incluir explícitamente los subdirectorios.

No utilice globbing de unix para pasar múltiples directorios, por ejemplo --watch ./lib/*, no funcionará. Necesita una bandera --watch por cada directorio vigilado.

Especificando la lista de vigilancia de extensiones

nodemon -e js,pug

Ahora nodemon se reiniciará ante cualquier cambio en los archivos del directorio (o subdirectorios) con las extensiones .js, .pug.

Ignorando los archivos

Por defecto, nodemon sólo se reiniciará cuando cambie un archivo .js JavaScript. En algunos casos querrá ignorar algunos archivos específicos, directorios o patrones de archivos, para evitar que nodemon reinicie prematuramente su aplicación.

Esto se puede hacer a través de la línea de comandos:

nodemon --ignore lib/ --ignore tests/

O se pueden ignorar archivos específicos:

nodemon --ignore lib/app.js

También se pueden ignorar patrones (pero asegúrese de citar los argumentos):

nodemon --ignore 'lib/*.js'

Note que por defecto, nodemon ignorará los directorios .git, node_modules, bower_components, .nyc_output, coverage y .sass-cache y añadirá sus patrones ignorados a la lista. Si desea vigilar efectivamente un directorio como node_modules, necesita anular las reglas de ignorar subyacentes por defecto.

La aplicación no se reinicia

En algunos entornos en red (como un contenedor que ejecuta nodemon leyendo a través de una unidad montada), necesitará utilizar el legacyWatch: true que habilita el sondeo de Chokidar.

A través de la CLI, utilice --legacy-watch o -L para abreviar:

nodemon -L

Aunque esto debería ser el último recurso, ya que sondeará todos los archivos que pueda encontrar.

Retrasar el reinicio

En algunas situaciones, puede querer esperar hasta que un número de archivos haya cambiado. El tiempo de espera antes de comprobar si hay cambios en los archivos es de 1 segundo. Si está subiendo un número de archivos y está tomando algún número de segundos, esto podría causar que su aplicación se reinicie varias veces innecesariamente.

Para añadir un acelerador adicional, o retrasar el reinicio, utilice el comando --delay:

nodemon --delay 10 server.js

Para mayor precisión, se pueden especificar milisegundos. Ya sea como un flotador:

nodemon --delay 2.5 server.js

O usando el especificador de tiempo (ms):

nodemon --delay 2500ms server.js

La cifra de retraso es el número de segundos (o milisegundos, si se especifica) para retrasar antes de reiniciar. Así que nodemon sólo reiniciará su aplicación el número dado de segundos después del último cambio de archivo.

Si usted está estableciendo este valor en nodemon.json, el valor siempre será interpretado en milisegundos. Por ejemplo, los siguientes son equivalentes:

nodemon --delay 2.5{ "delay": "2500"}

Recargando graciosamente su script

Es posible hacer que nodemon envíe cualquier señal que usted especifique a su aplicación.

nodemon --signal SIGHUP server.js

Su aplicación puede manejar la señal de la siguiente manera.

process.once("SIGHUP", function () { reloadSomeConfiguration();})

Tenga en cuenta que nodemon enviará esta señal a cada proceso en el árbol de procesos.

Si está usando cluster, entonces cada trabajador (así como el maestro) recibirá la señal. Si desea terminar todos los trabajadores al recibir un SIGHUP, un patrón común es atrapar el SIGHUP en el maestro, y reenviar SIGTERM a todos los trabajadores, mientras se asegura de que todos los trabajadores ignoran el SIGHUP.

Controlar el cierre de su script

nodemon envía una señal de muerte a su aplicación cuando ve una actualización de archivos. Si necesitas limpiar el cierre dentro de tu script puedes capturar la señal de kill y manejarla tú mismo.

El siguiente ejemplo escuchará una vez la señal SIGUSR2 (usada por nodemon para reiniciar), ejecutará el proceso de limpieza y luego se suicidará para que nodemon continúe con el control:

process.once('SIGUSR2', function () { gracefulShutdown(function () { process.kill(process.pid, 'SIGUSR2'); });});

Nota que el process.kill sólo es llamado una vez que tus trabajos de cierre están completos. Hat tip to Benjie Gillam for writing this technique up.

Triggering events when nodemon state changes

Si quieres notificaciones tipo growl cuando nodemon se reinicie o activar una acción cuando ocurra un evento, entonces puedes require nodemon o añadir acciones de eventos a tu archivo nodemon.json.

Por ejemplo, para desencadenar una notificación en un Mac cuando nodemon se reinicia, nodemon.json se ve así:

{ "events": { "restart": "osascript -e 'display notification \"app restarted\" with title \"nodemon\"'" }}

Una lista completa de eventos disponibles se encuentra en el wiki de estados de eventos. Tenga en cuenta que puede enlazar tanto a los estados como a los mensajes.

Pipe output to somewhere else

Using nodemon in your gulp workflow

Check out the gulp-nodemon plugin to integrate nodemon with the rest of your project’s gulp workflow.

Usando nodemon en tu flujo de trabajo Grunt

Comprueba el plugin grunt-nodemon para integrar nodemon con el resto del flujo de trabajo grunt de tu proyecto.

Pronunciación

Nodemon, ¿se pronuncia: node-mon, no-demon o node-e-mon (como pokémon)?

Bueno… ya me lo han preguntado muchas veces. Me gusta que me lo hayan preguntado antes. Ha habido apuestas sobre cuál es realmente.

La respuesta es sencilla, pero posiblemente frustrante. No voy a decir (cómo lo pronuncio). Es cosa de que lo llames como quieras. Todas las respuestas son correctas 🙂

Principios de diseño

  • Menos banderas es mejor
  • Funciona en todas las plataformas
  • Menos características
  • Que los individuos construir sobre nodemon
  • Ofrecer toda la funcionalidad de la CLI como una API
  • Las contribuciones deben tener y pasar pruebas

Nodemon no es perfecto, y los argumentos de la CLI se han extendido más allá de donde estoy completamente feliz, pero tal vez se puede reducir un poco un día.

Preguntas frecuentes

Mira las preguntas frecuentes y por favor añade tus propias preguntas si crees que pueden ayudar a otros.

Apoyadores

¡Gracias a todos nuestros apoyadores! 🙏

Patrocinadores

Apoya este proyecto convirtiéndote en patrocinador. Tu logo aparecerá aquí con un enlace a tu página web. Patrocina este proyecto hoy ❤️

Licencia

MIT http://rem.mit-license.org

Deja una respuesta

Tu dirección de correo electrónico no será publicada.