7. Nodemon à la rescousse

Précédemment, nous avons mis en place un premier point de terminaison, et c’est très bien. Nous aurions pu nous arrêter là. Mais comme nous l’avons vu, le problème c’est que nous devons à chaque fois couper et relancer la commande npm run start.

Pour le moment ce n’est pas forcément gênant, car nous n’avons pas beaucoup de code, mais imaginez la suite. Si vous devez effectuer plusieurs modifications pour corriger un bogue, et qu’il faut sans cesse couper et relancer la même commande, cela peut s’avérer très pénible. Bref, il faut trouver une solution.

Heureusement, nous ne sommes pas les premiers à avoir ce problème. Comme les développeurs sont des gens plutôt solidaires, il existe un paquet Node.js qui permet de résoudre ce problème, nommé Nodemon.

Le principe est simple, plutôt que d’exécuter une commande à chaque fois que vous avez besoin de démarrer votre API Rest, Nodemon va s’occuper d’exécuter votre projet Node en tâche de fond. C’est-à-dire qu’à chaque modification, Nodemon va automatiquement redémarrer votre API Rest, en prenant en compte les dernières modifications. C’est exactement ce qu’il nous faut. 👍

Pour la petite histoire, un programme qui tourne en continu en tâche de fond s’appelle un Demon en informatique. Nodemon est donc naturellement la contraction de Node et Demon.

Donc, pour commencer, nous allons installer Nodemon. Rien de vraiment compliqué, car grâce à notre camarade NPM, il suffit de lancer la commande suivante :

npm install --save-dev nodemon

Hey ! Mais qu’est-ce que c’est que cette option save-dev maintenant ? 😉

Alors, cela ressemble presque à l’option save précédente, mais ce n’est pas tout à fait la même chose. En fait, il faut apporter une petite précision. Il existe deux types de dépendances :

  • Les dépendances de votre projet, placées dans la section dependencies. Pour cela on utilise l’option save, comme nous l’avons fait avec Express.
  • Les dépendances de votre projet pendant le développement, placées dans une section appelée devDependencies. L’objectif ici, c’est de séparer les dépendances qui ne sont utiles que pendant le développement, du reste des autres dépendances. C’est le cas par exemple de Nodemon, qui ne sera utile que lors de nos développements. Une fois que nous aurons déployé notre application, nous n’aurons plus besoin de redémarrer l’application systématiquement. Dans ce cas, installer vos dépendances avec l’option save-dev :
{
  "name": "node-pokemon-api",
  "version": "1.0.0",
  "description": "An awesome API Rest to handle some pokemons.",
  "main": "app.js",
  "scripts": {
    "start": "node app.js"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "express": "x.y.z"
  },
  "devDependencies": {
    "nodemon": "x.y.z" // Le paquet Nodemon a bien été ajouté.
  }
}

Comme vous pouvez le constater, une section devDependancies a été ajouté par NPM, avec Nodemon à l’intérieur !

C’est parfait, il ne nous reste plus qu’à mettre à jour notre script start, afin de lui dire de démarrer notre projet avec Nodemon désormais :

{
  "name": "node-pokemon-api",
  "version": "1.0.0",
  "description": "An awesome API Rest to handle some pokemons.",
  "main": "app.js",
  "scripts": {
    "start": "nodemon app.js"
  },
  // ...
}

Maintenant, redémarrez votre API Rest avec Nodemon, via la commande npm run start.

Il ne vous reste plus qu’à modifier le message que vous souhaitez afficher depuis notre point de terminaison Express, par exemple « Hello again, Express ! ». Ensuite, retournez dans votre navigateur, et rafraîchissez la page. Vous devriez voir votre nouveau message apparaître.

Et voilà, le tour est joué !

Lorsque vous progresserez dans vos développements par la suite, pensez à laisser la commande npm run start tourner en tâche de fond, pour prendre en compte vos modifications au fur et à mesure.