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

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 requirenodemon 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

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.