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
- Uso
- Rejecución automática
- Reinicio manual
- Archivos de configuración
- package.json
- Usar nodemon como módulo
- Usar nodemon como proceso hijo
- Ejecutar scripts que no sean de nodemon
- Ejecutables por defecto
- Monitorización de múltiples directorios
- Especificando la lista de vigilancia de extensiones
- Ignorando los archivos
- La aplicación no se reinicia
- Retrasar el reinicio
- Recargando graciosamente su script
- Controlar el cierre de su script
- Triggering events when nodemon state changes
- Pipe output to somewhere else
- Using nodemon in your gulp workflow
- Usando nodemon en tu flujo de trabajo Grunt
- Pronunciación
- Principios de diseño
- Preguntas frecuentes
- Apoyadores
- Patrocinadores
- Licencia
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