Projet NodeJS
Nous sommes prêts à initialiser notre projet NodeJS, et ajouter typescript.
Initialiser un nouveau projet
Nous commençons des nouveaux projets node en initialisant le projet. Dans le terminal de VSCode :
Vous répondez à toutes les questions. À l'issue de cette instruction est le fichier crucial au projet : package.json
package.json
et npm
package.json
et npm
Le fichier package.json
est l'indexe de votre projet. Il contient plusieurs informations utiles pour votre projet :
Son nom, sa version etc.
scripts
: La liste de commandes possibles avecnpm run ...
.dependencies
: Les librairies tierces venant des dépôts node à inclure dans notre projet. C'est la liste essentielle pour tourner notre projet en production.devDependencies
: Les librairies supplémentaires pour compléter notre environnement de dev. Typiquement, ce sont les librairies de test, ou des types à inclure (si on utilise TypeScript)
Les entrées dependencies
et devDependencies
sont automatiquement gérés par la commande npm
. En effet npm
est le node package manager et on l'utilise pour installer, mettre à jour, ou enlever les librairies.
Par exemple, nous allons installer Express :
On voit que package.json
s'est mis à jour automatiquement :
On voit apparaître le dossier node_modules
qui contient toutes les librairies tierces de notre projet.
D'autres commandes de npm
sont :
Les packages déployés par npm évoluent en utilisant un système de versioning :
Patch : sont les corrections de bug, et ne changent pas le comportement ou compatibilité de la librairie
Version mineure : Normalement rétrocompatible dans la même version mineure, mais peut-être avec des refactoring ou des modifications (normalement ajouts) plus importants
Version majeure : Risque de casser votre projet, il y aura des breaking changes, modifications qui risquent de casser votre code, par exemple, changer l'API, enlever les fonctions obsolètes, etc.
Dans package.json
nous pouvons exprimer les limites de npm update
, en utilisant les symboles suivants :
Dans package.json
si on voit :
un tilde
~
devant la version : on va fixer la version mineure, mais autoriser les mises à jour de la version patchun caret
^
devant la version : on va fixer la version majeure, mais autoriser les mises à jour de la version mineureaucun symbole devant la version : on ne va jamais mettre à jour la version
On peut aussi préciser la version majeure, et laisser npm
choisir la version mineure et patch automatiquement :
Mon premier script avec NodeJS
Nous allons créer un nouveau fichier src/hello.js
:
Il est facile d'exécuter notre premier script avec la commande node
:
Pour info, console.log
va émettre vers le stdout
, et console.error
vers le stderr
. Vous pouvez donc intégrer un script node dans votre chaîne de commandes.
Exécuter comme un script shell
On peut utiliser un shebang qui permet de rendre notre script exécuter comme n'importe quel script :
Et, en rendant notre fichier exécutable, on pourrait l'invoquer comme un script shell:
Exécuter avec npm
La version plus classique de lancer un script node est en utilisant package.json
, notamment le tableau scripts
:
On lance notre script avec :
Le champ scripts
est très utile pour créer et configurer plusieurs façons de lancer notre code :
Lancer le serveur en mode développement
Lancer le serveur en mode production
Lancer un script d'utilité qui, par exemple, agit de façon ponctuelle sur votre base de données
Lancer des tests
Lancer des outils de validation de votre code (linter, orthographe, etc)
Par exemple, on aimerait que notre code se lance automatiquement dès qu'on apporte une modification. Pour cela, on va utiliser le package nodemon
qui surveille notre base de code et relance le script dès qu'une modification est détectée :
L'option --save-dev
précise que cette dépendance n'est utile que pour l'environnement de développement. Justement, si on regarde package.json
, on voit qu'il y a une nouvelle section qui s'appelle devDependencies
:
Ces dépendances sont ignorées lors de la mise en production. L'idée est d'optimiser l'artéfact de production et exclure tous les modules qui ne sont pas utiles ou potentiellement risqués.
On modifie notre package.json
afin d'utiliser nodemon
au lieu de node :
package.json
Relancez votre script :
À noter : Si nodemon ne relance pas votre script après une modification, il faut ajouter l'option -L
pour activer le legacy polling.
Dernière mise à jour