1. Qu'est-ce que Node.js ?
Node.js est un runtime JavaScript côté serveur basé sur le moteur V8 de Chrome. Il permet d'exécuter du JavaScript en dehors du navigateur — sur votre machine, un serveur, un conteneur Docker, etc.
Node.js utilise un modèle non-bloquant / event-driven : au lieu d'attendre qu'une opération (lecture disque, requête réseau) se termine, il enregistre un callback et continue à traiter d'autres événements. Cela le rend extrêmement performant pour les applications I/O intensives.
Cas d'usage principaux
- API REST — backends légers et rapides (Express, Fastify, Hono)
- Outils CLI — scripts de build, linters, générateurs de code
- Serveurs temps réel — chat, notifications, WebSockets
- Microservices — architecture distribuée
- Build tooling — Webpack, Vite, Rollup, esbuild tournent tous sur Node.js
Node.js vs PHP vs Python pour les APIs
| Critère | Node.js | PHP | Python (Django/Flask) |
|---|---|---|---|
| Modèle I/O | Asynchrone non-bloquant | Synchrone bloquant | Synchrone (async possible) |
| Performance I/O | Excellent | Moyen | Bon |
| Courbe d'apprentissage | Modérée | Facile | Facile |
| Écosystème npm | +2M packages | Composer | PyPI |
| Language full-stack | JavaScript partout | Non | Non |
| Usage principal | APIs, temps réel, CLI | CMS, web classique | Data science, ML, web |
Exemple minimal
// hello.js — votre premier script Node.js
console.log('Hello from Node.js !');
console.log('Version :', process.version);
console.log('Plateforme :', process.platform);
// Lancer avec : node hello.js
2. Installation & REPL
Téléchargez Node.js depuis nodejs.org. Choisissez la version LTS (Long Term Support)
pour les projets de production. L'installation inclut également npm (Node Package Manager).
Vérifier l'installation
# Vérifier les versions installées
node --version # ex: v20.11.0
npm --version # ex: 10.2.4
# Exécuter une expression directement
node -e "console.log(process.version)"
node -e "console.log(2 ** 10)" # 1024
Le REPL (Read-Eval-Print-Loop)
Le REPL est un interpréteur interactif. Tapez node dans votre terminal pour l'ouvrir.
C'est idéal pour tester du code rapidement.
// Dans le terminal, tapez : node
// Vous entrez dans le REPL Node.js
> 2 + 2
4
> 'Hello' + ' World'
'Hello World'
> [1, 2, 3].map(x => x * 2)
[ 2, 4, 6 ]
> const obj = { name: 'Alice', age: 30 }
undefined
> obj.name
'Alice'
> .exit // ou Ctrl+C deux fois pour quitter
process.argv — Arguments en ligne de commande
process.argv est un tableau contenant les arguments passés au script.
argv[0] est le chemin de Node, argv[1] est le chemin du script,
les suivants sont vos arguments.
// args.js
const args = process.argv.slice(2); // Ignorer node et le nom du script
console.log('Arguments reçus :', args);
// node args.js Alice 25
// Arguments reçus : [ 'Alice', '25' ]
3. Premier script Node.js
Créez un fichier hello.js et exécutez-le avec node hello.js.
Node.js fournit plusieurs objets globaux utiles dès le départ.
Les méthodes console
// console.js — Les différents niveaux de log
console.log('ℹ️ Information standard');
console.warn('⚠️ Avertissement — affiché en jaune dans certains terminaux');
console.error('❌ Erreur — écrit sur stderr');
console.info('📋 Information (alias de log)');
console.table([{ nom: 'Alice', age: 30 }, { nom: 'Bob', age: 25 }]);
console.time('mesure');
// ... code à mesurer ...
console.timeEnd('mesure'); // mesure: 1.234ms
process.exit() et codes de sortie
// exit.js
const code = process.argv[2];
if (!code) {
console.error('❌ Argument manquant');
process.exit(1); // Code 1 = erreur (convention Unix)
}
console.log('✅ Code reçu :', code);
process.exit(0); // Code 0 = succès
Variables d'environnement avec process.env
// env.js — Lire les variables d'environnement
const env = process.env.NODE_ENV || 'development';
const port = process.env.PORT || 3000;
const apiKey = process.env.API_KEY || 'non-configurée';
console.log(`Environnement : ${env}`);
console.log(`Port : ${port}`);
console.log(`API Key : ${apiKey}`);
// Lancer avec : NODE_ENV=production PORT=8080 node env.js
// Ou sur Windows : set NODE_ENV=production && node env.js
Script complet avec arguments
// greet.js — Script complet
const [,, prenom, age] = process.argv;
if (!prenom) {
console.error('Usage: node greet.js [age]');
process.exit(1);
}
const ageMsg = age ? `, vous avez ${age} ans` : '';
console.log(`Bonjour ${prenom}${ageMsg} ! 👋`);
console.log(`Node.js ${process.version} sur ${process.platform}`);
process.exit(1) en cas d'erreur dans un script CLI.
Les outils de CI/CD utilisent ce code de retour pour détecter les échecs.
4. Modules CommonJS
Node.js utilise le système de modules CommonJS (CJS) par défaut.
Chaque fichier est un module isolé. Vous importez avec require() et
exportez avec module.exports.
Créer un module : math.js
// math.js — Définir un module
function additionner(a, b) { return a + b; }
function soustraire(a, b) { return a - b; }
function multiplier(a, b) { return a * b; }
function diviser(a, b) {
if (b === 0) throw new Error('Division par zéro !');
return a / b;
}
const PI = 3.14159265;
// Exporter un objet avec les fonctions
module.exports = { additionner, soustraire, multiplier, diviser, PI };
Utiliser un module local
// main.js — Importer et utiliser math.js
const math = require('./math'); // .js est optionnel
console.log(math.additionner(5, 3)); // 8
console.log(math.multiplier(4, 7)); // 28
console.log(math.PI); // 3.14159265
// Destructuration pour plus de clarté
const { diviser, soustraire } = require('./math');
console.log(diviser(10, 2)); // 5
console.log(soustraire(9, 3)); // 6
Raccourci exports.xxx
// utils.js — Utiliser exports directement
exports.majuscule = str => str.toUpperCase();
exports.minuscule = str => str.toLowerCase();
exports.capitaliser = str => str.charAt(0).toUpperCase() + str.slice(1).toLowerCase();
// ⚠️ Ne PAS mélanger exports.xxx et module.exports = {...}
// Choisir l'un ou l'autre dans un fichier
Types de modules
| Type | Import | Exemple |
|---|---|---|
| Module local | require('./fichier') | require('./math') |
| Module natif | require('nom') | require('fs'), require('path') |
| Module npm | require('nom') | require('express') |
5. npm & package.json
npm (Node Package Manager) est le gestionnaire de packages officiel de Node.js. Il vous permet d'installer des bibliothèques tierces et de gérer les scripts de votre projet.
Initialiser un projet
# Créer un dossier et initialiser le projet
mkdir mon-projet && cd mon-projet
npm init -y # Crée package.json avec des valeurs par défaut
# Installer des dépendances
npm install express # Dépendance de production
npm install --save-dev nodemon # Dépendance de développement uniquement
npm install dayjs # Autre exemple
# Raccourcis courants
npm i express # npm install express
npm i -D nodemon # npm install --save-dev nodemon
# Désinstaller
npm uninstall express
Scripts npm
{
"scripts": {
"start": "node server.js",
"dev": "nodemon server.js",
"test": "node tests/index.js",
"build": "node scripts/build.js"
}
}
// Lancer avec : npm start, npm run dev, npm test
Semantic Versioning (SemVer)
| Notation | Signification | Exemple |
|---|---|---|
1.2.3 | Version exacte | Exactement 1.2.3 |
^1.2.3 | Compatible mineur | 1.2.3 à <2.0.0 |
~1.2.3 | Compatible patch | 1.2.3 à <1.3.0 |
* | Toute version | ⚠️ Dangereux |
>=1.0.0 | Supérieur ou égal | 1.0.0 et plus |
package.json complet
{
"name": "mon-api-node",
"version": "1.0.0",
"description": "API REST avec Node.js",
"main": "server.js",
"scripts": {
"start": "node server.js",
"dev": "nodemon server.js",
"test": "node tests/index.js"
},
"dependencies": {
"express": "^4.18.2",
"dotenv": "^16.3.1"
},
"devDependencies": {
"nodemon": "^3.0.2"
},
"engines": {
"node": ">=18.0.0"
},
"author": "Votre Nom",
"license": "MIT"
}