nodemon est un outil qui aide à développer des applications basées sur node.js en redémarrant automatiquement l’application node lorsque des changements de fichiers dans le répertoire sont détectés.
nodemon ne nécessite aucune modification supplémentaire de votre code ou de votre méthode de développement. nodemon est une enveloppe de remplacement pour node
. Pour utiliser nodemon
, remplacez le mot node
sur la ligne de commande lors de l’exécution de votre script.
- Installation
- Utilisation
- Réexécution automatique
- Redémarrage manuel
- Fichiers de configuration
- package.json
- Utiliser nodemon comme module
- Utiliser nodemon comme processus enfant
- Exécution de scripts non-nodemon
- Exécutables par défaut
- Surveiller plusieurs répertoires
- Spécifier la liste de surveillance des extensions
- Ignorer les fichiers
- L’application ne redémarre pas
- Retarder le redémarrage
- Rechargement gracieux vers le bas de votre script
- Contrôle de l’arrêt de votre script
- Déclenchement d’événements lorsque l’état de nodemon change
- Pipe output to somewhere else
- Utiliser nodemon dans votre workflow gulp
- Utilisation de nodemon dans votre flux de travail Grunt
- Prononciation
- Principes de conception
- FAQ
- Backers
- Sponsors
- Licence
Installation
Soit par clonage avec git, soit en utilisant npm (la manière recommandée):
npm install -g nodemon
Et nodemon sera installé globalement sur votre chemin système.
Vous pouvez également installer nodemon comme une dépendance de développement:
npm install --save-dev nodemon
Avec une installation locale, nodemon ne sera pas disponible dans votre chemin système. Au lieu de cela, l’installation locale de nodemon peut être exécutée en l’appelant depuis un script npm (tel que npm start
) ou en utilisant npx nodemon
.
Utilisation
nodemon enveloppe votre application, de sorte que vous pouvez passer tous les arguments que vous passeriez normalement à votre app:
nodemon
Pour les options CLI, utilisez l’argument -h
(ou --help
) :
nodemon -h
L’utilisation de nodemon est simple, si mon application acceptait un hôte et un port comme arguments, je la lancerais comme suit :
nodemon ./server.js localhost 8080
Toute sortie de ce script est préfixée par , sinon toutes les sorties de votre application, erreurs comprises, seront répercutées comme prévu.
Si aucun script n’est donné, nodemon testera pour un fichier package.json
et s’il est trouvé, exécutera le fichier associé à la propriété principale (ref).
Vous pouvez également passer l’indicateur inspect
à node par la ligne de commande comme vous le feriez normalement :
nodemon --inspect ./server.js 80
Si vous avez un fichier package.json
pour votre application, vous pouvez omettre entièrement le script principal et nodemon lira le package.json
pour la propriété main
et utilisera cette valeur comme application.
nodemon recherchera également la propriété scripts.start
dans package.json
(à partir de nodemon 1.1.x).
Vérifiez également la FAQ ou les problèmes de nodemon.
Réexécution automatique
nodemon a été écrit à l’origine pour redémarrer les processus suspendus tels que les serveurs web, mais supporte maintenant les apps qui sortent proprement. Si votre script sort proprement, nodemon continuera à surveiller le répertoire (ou les répertoires) et redémarrera le script s’il y a des changements.
Redémarrage manuel
Alors que nodemon est en cours d’exécution, si vous devez redémarrer manuellement votre application, au lieu d’arrêter et de redémarrer nodemon, vous pouvez taper rs
avec un retour chariot, et nodemon redémarrera votre processus.
Fichiers de configuration
nodemon prend en charge les fichiers de configuration locaux et globaux. Ceux-ci sont généralement nommés nodemon.json
et peuvent être situés dans le répertoire de travail actuel ou dans votre répertoire personnel. Un autre fichier de configuration local peut être spécifié avec l’option --config <file>
.
La spécificité est la suivante, de sorte qu’un argument de ligne de commande remplacera toujours les paramètres du fichier de configuration :
- arguments de ligne de commande
- config locale
- config globale
Un fichier de configuration peut prendre n’importe lequel des arguments de ligne de commande comme valeurs de clé JSON, par exemple :
{ "verbose": true, "ignore": , "execMap": { "rb": "ruby", "pde": "processing --sketch={{pwd}} --run" }}
Le fichier nodemon.json
ci-dessus pourrait être ma configuration globale afin que je dispose d’un support pour les fichiers ruby et les fichiers de traitement, et je peux exécuter nodemon demo.pde
et nodemon saura automatiquement comment exécuter le script même si le support out of the box pour les scripts de traitement.
Un autre exemple d’options peut être vu dans sample-nodemon.md
package.json
Si vous voulez garder toutes vos configurations de paquet en un seul endroit, nodemon supporte l’utilisation de package.json
pour la configuration.Spécifiez la configuration dans le même format que vous le feriez pour un fichier de configuration mais sous nodemonConfig
dans le fichier package.json
, par exemple, prenez le package.json
:
{ "name": "nodemon", "homepage": "http://nodemon.io", "...": "... other standard package.json values", "nodemonConfig": { "ignore": , "delay": "2500" }}
Notez que si vous spécifiez un fichier --config
ou fournissez un nodemon.json
local toute configuration package.json
est ignorée.
Cette section a besoin d’une meilleure documentation, mais pour l’instant vous pouvez aussi voir nodemon --help config
(également ici).
Utiliser nodemon comme module
Veuillez voir doc/requireable.md
Utiliser nodemon comme processus enfant
Veuillez voir doc/events.md
Exécution de scripts non-nodemon
nodemon peut également être utilisé pour exécuter et surveiller d’autres programmes. nodemon lira l’extension de fichier du script en cours d’exécution et surveillera cette extension au lieu de .js
s’il n’y a pas nodemon.json
:
nodemon --exec "python -v" ./app.py
Maintenant, nodemon exécutera app.py
avec python en mode verbeux (notez que si vous ne passez pas d’args au programme exec, vous n’avez pas besoin des guillemets), et recherchera les fichiers nouveaux ou modifiés avec l’extension .py
.
Exécutables par défaut
En utilisant le fichier de configuration nodemon.json
, vous pouvez définir vos propres exécutables par défaut en utilisant la propriété execMap
. Ceci est particulièrement utile si vous travaillez avec un langage qui n’est pas supporté par défaut par nodemon.
Pour ajouter le support permettant à nodemon de connaître l’extension .pl
(pour Perl), le fichier nodemon.json
ajouterait :
{ "execMap": { "pl": "perl" }}
Maintenant en exécutant ce qui suit, nodemon saura utiliser perl
comme exécutable :
nodemon script.pl
Il est généralement recommandé d’utiliser le nodemon.json
global pour ajouter vos propres options execMap
. Cependant, s’il y a un défaut commun qui manque, cela peut être fusionné dans le projet afin que nodemon le supporte par défaut, en modifiant default.js et en envoyant une demande de pull.
Surveiller plusieurs répertoires
Par défaut, nodemon surveille le répertoire de travail actuel. Si vous voulez prendre le contrôle de cette option, utilisez l’option --watch
pour ajouter des chemins spécifiques:
nodemon --watch app --watch libs app/server.js
Maintenant, nodemon ne redémarrera que s’il y a des changements dans le répertoire ./app
ou ./libs
. Par défaut, nodemon traversera les sous-répertoires, il n’est donc pas nécessaire d’inclure explicitement les sous-répertoires.
N’utilisez pas le globbing unix pour passer plusieurs répertoires, par exemple --watch ./lib/*
, cela ne fonctionnera pas. Vous avez besoin d’un drapeau --watch
par répertoire surveillé.
Spécifier la liste de surveillance des extensions
nodemon -e js,pug
Maintenant, nodemon redémarrera lors de toute modification des fichiers dans le répertoire (ou les sous-répertoires) avec les extensions .js
, .pug
.
Ignorer les fichiers
Par défaut, nodemon ne redémarrera que lorsqu’un fichier JavaScript .js
change. Dans certains cas, vous voudrez ignorer certains fichiers, répertoires ou modèles de fichiers spécifiques, pour empêcher nodemon de redémarrer prématurément votre application.
Cela peut être fait via la ligne de commande:
nodemon --ignore lib/ --ignore tests/
Ou des fichiers spécifiques peuvent être ignorés:
nodemon --ignore lib/app.js
Des modèles peuvent également être ignorés (mais assurez-vous de citer les arguments) :
nodemon --ignore 'lib/*.js'
Notez que par défaut, nodemon ignorera les répertoires .git
, node_modules
, bower_components
, .nyc_output
, coverage
et .sass-cache
et ajoutera vos motifs ignorés à la liste. Si vous voulez effectivement surveiller un répertoire comme node_modules
, vous devez passer outre les règles d’ignorance par défaut sous-jacentes.
L’application ne redémarre pas
Dans certains environnements en réseau (comme un conteneur exécutant nodemon lisant à travers un lecteur monté), vous devrez utiliser le legacyWatch: true
qui active le polling de Chokidar.
Via le CLI, utilisez soit --legacy-watch
ou -L
pour faire court:
nodemon -L
Bien que cela devrait être un dernier recours car il sondera chaque fichier qu’il peut trouver.
Retarder le redémarrage
Dans certaines situations, vous pouvez vouloir attendre jusqu’à ce qu’un certain nombre de fichiers aient changé. Le délai d’attente avant la vérification des nouveaux changements de fichiers est de 1 seconde. Si vous téléchargez un certain nombre de fichiers et que cela prend un certain nombre de secondes, cela pourrait amener votre application à redémarrer plusieurs fois inutilement.
Pour ajouter un accélérateur supplémentaire, ou retarder le redémarrage, utilisez la commande --delay
:
nodemon --delay 10 server.js
Pour plus de précision, des millisecondes peuvent être spécifiées. Soit sous forme de flottant:
nodemon --delay 2.5 server.js
Ou en utilisant le spécificateur de temps (ms):
nodemon --delay 2500ms server.js
Le chiffre du délai est le nombre de secondes (ou de millisecondes, si spécifié) à attendre avant de redémarrer. Ainsi, nodemon ne redémarrera votre application que le nombre de secondes donné après le dernier changement de fichier.
Si vous définissez cette valeur dans nodemon.json
, la valeur sera toujours interprétée en millisecondes. Par exemple , les éléments suivants sont équivalents :
nodemon --delay 2.5{ "delay": "2500"}
Rechargement gracieux vers le bas de votre script
Il est possible de demander à nodemon d’envoyer tout signal que vous spécifiez à votre application.
nodemon --signal SIGHUP server.js
Votre application peut gérer le signal comme suit .
process.once("SIGHUP", function () { reloadSomeConfiguration();})
Veuillez noter que nodemon enverra ce signal à chaque processus dans l’arbre des processus.
Si vous utilisez cluster
, alors chaque worker (ainsi que le maître) recevra le signal. Si vous souhaitez mettre fin à tous les travailleurs à la réception d’un SIGHUP
, un modèle commun est d’attraper le SIGHUP
dans le maître, et de transmettre SIGTERM
à tous les travailleurs, tout en s’assurant que tous les travailleurs ignorent le SIGHUP
.
Contrôle de l’arrêt de votre script
nodemon envoie un signal kill à votre application lorsqu’il voit une mise à jour de fichier. Si vous avez besoin de nettoyer à l’arrêt à l’intérieur de votre script, vous pouvez capturer le signal kill et le gérer vous-même.
L’exemple suivant écoutera une fois le signal SIGUSR2
(utilisé par nodemon pour redémarrer), exécutera le processus de nettoyage puis se tuera lui-même pour que nodemon continue à le contrôler:
process.once('SIGUSR2', function () { gracefulShutdown(function () { process.kill(process.pid, 'SIGUSR2'); });});
Notez que le process.kill
n’est appelé qu’une fois que vos travaux d’arrêt sont terminés. Hat tip à Benjie Gillam pour avoir écrit cette technique.
Déclenchement d’événements lorsque l’état de nodemon change
Si vous voulez des notifications de type growl lorsque nodemon redémarre ou pour déclencher une action lorsqu’un événement se produit, alors vous pouvez soit require
nodemon ou ajouter des actions d’événements à votre fichier nodemon.json
.
Par exemple, pour déclencher une notification sur un Mac lorsque nodemon redémarre, nodemon.json
ressemble à ceci:
{ "events": { "restart": "osascript -e 'display notification \"app restarted\" with title \"nodemon\"'" }}
Une liste complète des événements disponibles est listée sur le wiki des états d’événements. Notez que vous pouvez vous lier à la fois aux états et aux messages.
Pipe output to somewhere else
Utiliser nodemon dans votre workflow gulp
Voyez le plugin gulp-nodemon pour intégrer nodemon au reste du workflow gulp de votre projet.
Utilisation de nodemon dans votre flux de travail Grunt
Voyez le plugin grunt-nodemon pour intégrer nodemon avec le reste du flux de travail grunt de votre projet.
Prononciation
nodemon, se prononce-t-il : node-mon, no-demon ou node-e-mon (comme pokémon) ?
Eh bien… on m’a déjà posé cette question plusieurs fois. J’aime bien qu’on me l’ait déjà demandé. Il y a eu des paris pour savoir lequel c’est réellement.
La réponse est simple, mais peut-être frustrante. Je ne dis pas (comment je le prononce). C’est à vous de l’appeler comme vous voulez. Toutes les réponses sont correctes 🙂
Principes de conception
- Moins de drapeaux, c’est mieux
- Fonctionne sur toutes les plateformes
- Moins de fonctionnalités
- Laisser les individus. construire au dessus de nodemon
- Offrir toutes les fonctionnalités du CLI comme une API
- Les contributions doivent avoir et passer des tests
Nodemon n’est pas parfait, et les arguments de la CLI se sont étendus au-delà de là où je suis complètement heureux, mais peut-être que cela peut être réduit un peu un jour.
FAQ
Voyez la FAQ et ajoutez vos propres questions si vous pensez qu’elles pourraient aider les autres.
Backers
Merci à tous nos backers ! 🙏
Sponsors
Soutiens ce projet en devenant un sponsor. Votre logo apparaîtra ici avec un lien vers votre site web. Sponsorisez ce projet aujourd’hui ❤️
Licence
MIT http://rem.mit-license.org