Les bases de NodeJS
NPM
Lorsque vous installez NodeJS sur votre machine, vous installez automatiquement un utilitaire de commande associé: NPM. Ce dernier va permettre la gestion de notre projet node JS, à commencer par sa création. Rendez-vous dans votre dossier de travail et utilisez la commande suivante afin de créer un projet NodeJS:
npm init
# Variante permettant de passer la phase interactive
npm init -y
Cela va vous créer un fichier très important: le package.json. Qui sera de cette forme:
{
"name": "test",
"version": "1.0.0",
"description": "",
"main": "index.js",
"dependencies": {},
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC"
}
Il faut voir le package.json comme la carte d'identité de votre projet NodeJS. Ce fichier JSON va contenir des clés précises qui détiendront chacune une information sur une partie du projet. Par exemple son nom, à quelle version en est ce projet, son ou ses auteur(s), son fichire de point d'entrée, ...
Il y en a deux qui vont être particulièrement intéressantes: les dependencies et les scripts. Nous détaillerons ces deux clés un peu plus tard.
Notre premier fichier
Nous venons de créer la carte d'identité de notre projet mais ce dernier ne fait pas grand chose. Nous allons désormais essayer d'executer un fichier JS. Faisons nos premier pas à travers une fonction de somme. Créer un fichier index.js
et ajoutez le code suivant:
function add(a, b) {
return a + b;
}
const result = add(2, 3);
console.log(`La somme de 2 et 3 est ${result}`);
Executez ensuite la commande suivante dans votre terminal:
node index.js
Package et dependencies
L'un des intêret d'utiliser NodeJS est la gestion des paquets. Ces paquets sont des bibliothèques de différentes utilités que les développeur vont pouvoir installer dans un projet NodeJS pour éviter d'avoir eux-même à réecrire des parties entières de code.
A terme votre application que vous développer peut elle-même être un package que vous mettrez à disposition sur le web pour d'autres utilisateurs.
Nous parlions plus tôt de NPM comme utilitaire de commande, il faut dire qu'en réalité NPM est plutôt un gestionnaire de paquet.
Pour installer un paquet nous allons utiliser la commande suivante:
npm install nom_du_paquet
Dans notre cas nous voulons simplifier l'utilisation de fonctions mathématiques, et nous voulons aussi apporter un peu de couleur à notre terminal. Nous allons donc installer deux paquets: chalk et mathjs.
npm install chalk mathjs
Cette commande va installer les fichier clés du paquet dans un dossier appelé node_modules
. Vous n'avez pas nécessairement besoin de fouiller ce fichier, dites vous juste qu'il sert à stocker vos packages externes installés. Par ailleurs on peut remarquer dans le package.json
que la clé depedencies
est désormais alimentée avec le nom de notre paquet suivi de sa version. La liste de tout les paquets installés par votre projet seront donc désormais indiquée dans cette clé dependencies.
Maintenant nous allons utiliser ces paquets dans notre fichier index.js
. Ajoutez le code suivant:
import { add } from 'mathjs';
import chalk from 'chalk';
const a = 2;
const b = 3;
const result = add(a, b);
console.log(chalk.green(`La somme de ${a} et ${b} est ${result}`));
Package-lock.json
Lorsque vous installez un paquet, NPM va créer un fichier package-lock.json
. Ce fichier est un fichier de verrouillage de version. Il va permettre de garantir que les versions des paquets installés dans votre projet restent les mêmes. Cela permet d'éviter les problèmes de compatibilité entre les différentes versions des paquets.
Dans le cas ou vous souhaitez installer les dépendances d'un projet, il est recommandé d'utiliser la commande
npm ci
qui va se baser sur le fichier package-lock.json pour installer les dépendances.
Global et local
Il y a une différence à faire entre ces deux états. Un paquet installé avec npm install
est installé localement. C'est à dire qu'il n'est accessible que dans le scope de notre projet. Et c'est uniquement une fois notre serveur node démarré que ce dernier pourra accéder aux différents packages.
Il faut comprendre par la que si vous cherchez à utiliser une fonction de package dans votre terminal elle ne sera pas accessible car votre terminal n'a pas accès au serveur tant qu'il n'est pas lancé.
Pour utiliser un package dans votre terminal, il faut l'installer sur votre système d'exploitation directement et non pas dans un projet. Ce peut-être utile dans le cas ou vous avez besoin d'un package commun à plusieurs projets. Ou comme dit précédemment pour des packages qui doivent être utilisés dans le terminal.
Pour ce faire nous allons ajouter le suffixe -g à la commande d'installation : npm install -g nom_du_package
.
Vous pouvez ensuite vérifier la liste des package globaux installés grâce à la commande npm list -g
.
dependencies et devDependencies
Nous avons vu plus tôt que les dépendances étaient stockées dans la clé dependencies
du package.json. Il existe une autre clé qui est devDependencies
. Cette dernière va contenir les paquets qui ne sont pas nécessaires au fonctionnement de l'application mais qui sont utiles pour le développement. Par exemple un package de test, un package de formatage de code, ...
Scripts
Dans la section précedente nous disions que si nous voulions executer des packages installés localement au lancement de notre application nous ne pouvions pas le faire depuis le terminal. Cependant au moment où mon serveur démarre je souhaiterai utiliser le package nodemon pour le hotreaload.
Pour contourner ce problème, nous allons utiliser la clé scripts
du package.json
. Dans cet objet, vous allez indiquer autant de clés que vous souhaitez de scripts. Vous pouvez par exemple créer un script dev
qui correspondra à votre environnement de développement et un script test
qui correspondra à votre environnement de test.
Quelque soit le nom que vous donnez à votre script, sa valeur sera l'équivalent de ce que vous pourriez indiquer dans votre terminal. Si je veux utiliser nodemon dans le terminal j'utiliserai la commande nodemon index.js
. Pour utiliser nodemon dans un script je vais donc indiquer ceci dans mon script dev
:
{
"scripts": {
"dev": "nodemon index.js",
"test": "echo \"Error: no test specified\" && exit 1"
}
}
Ne pas oublier d'installer nodemon avec la commande
npm install -D nodemon
.
Pour executer votre script dans votre terminal vous utiliserez désormais la commande npm run nom_du_script
.
Les scripts ont en réalité de nombreux autres intêrets que de simplement executer des packages locaux, ils peuvent définir des variables d'environnement par exemple, réaliser une suite d'instructions avant l'execution et permettent aussi de générer des environnements différents (test, dev, build).
Fonctions fléchées (Arrow functions)
Les fonctions fléchées sont une nouvelle syntaxe pour définir des fonctions en JavaScript. Elles sont plus courtes et plus lisibles que les fonctions classiques. Voici un exemple de fonction fléchée:
const add = (a, b) => a + b;
Ce morceau de code est équivalent à:
function add(a, b) {
return a + b;
}
Récapitulatif des commandes utiles
npm init
: Créer un projet nodejs et initialise son package.jsonnpm init -y
: Variante permettant de passer la phase interactivenpm install
: Installer les dépendances d'un projetnpm ci
: Installer les dépendances d'un projet en se basant sur le fichier package-lock.jsonnpm install nom_du_paquet
: Installer un paquetnpm install -g nom_du_package
: Installer un paquet globalementnpm list -g
: Vérifier la liste des package globaux installésnpm run nom_du_script
: Executer un script