Node.js

Les bases de NodeJS

Comprendre les bases de NodeJS et comment démarrer un projet

NPM

Lorsque vous installez NodeJS sur votre machine, vous installez automatiquement un utilitaire de commande associé : * *NPM (Node Package Manager)**. 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 Node.js. Ce fichier JSON va contenir des clés précises qui détiennent chacune une information sur une partie du projet, par exemple : son nom, la version du projet, son ou ses auteurs, son fichier de point d'entrée, etc.

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'exécuter un fichier JavaScript. Faisons nos premiers pas à travers une fonction de somme. Créez 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}`)

Exécutez ce code avec la commande suivante dans votre terminal :

node index.js

Vous devriez voir s'afficher dans votre terminal : La somme de 2 et 3 est 5.

La commande node permet d'exécuter un fichier JavaScript avec Node.js.

Package et dependencies

L'un des intérêts d'utiliser Node.js est la gestion des paquets. Ces paquets sont des bibliothèques de différentes utilités que les développeurs vont pouvoir installer dans un projet Node.js pour éviter d'avoir eux-mêmes à réécrire des parties entières de code.

À terme, votre application que vous développez peut elle-même devenir 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 paquets.

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 fichiers clés du paquet dans un dossier appelé node_modules. Vous n'avez pas nécessairement besoin de fouiller dans ce dossier ; sachez simplement qu'il sert à stocker vos packages externes installés. Par ailleurs, on peut remarquer dans le package.json que la clé dependencies est désormais alimentée avec le nom de notre paquet suivi de sa version. La liste de tous les paquets installés par votre projet sera donc désormais indiquée dans cette clé dependencies.

Maintenant, nous allons utiliser ces paquets dans notre fichier index.js. Ajoutez-y 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 où 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 là 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. Cela peut être utile dans le cas où 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 packages globaux installés grâce à la commande npm list -g.

Dépendances de développement

Le package.json distingue deux types de dépendances selon leur utilité :

  • dependencies : Ce sont les packages indispensables au fonctionnement de votre application, même en production (sur le serveur déployé).
  • devDependencies : Ce sont les packages qui facilitent le développement mais ne sont pas nécessaires lorsque l'application est déployée en production.

Installation :

npm install express
# ou
npm install -S express  # -S pour --save (par défaut)
npm install -D nodemon
# ou
npm install --save-dev nodemon

Scripts

La clé scripts du package.json permet d'exécuter des commandes via npm run. C'est particulièrement utile pour :

  • Exécuter des packages locaux (sans installation globale)
  • Créer des raccourcis pour des commandes complexes
  • Définir différents environnements (dev, test, build)

Installation :

npm install -D nodemon

Configuration dans package.json :

{
  "scripts": {
    "dev": "nodemon index.js",
    "start": "node index.js"
  }
}

Exécution :

npm run dev    # Lance nodemon index.js
npm run test   # Lance les tests

Récapitulatif des commandes utiles