Imports et exports : le code en morceaux
Export nommé/default, résolution relative, évaluation unique.
Objectifs
À la fin de cette leçon, vous saurez :
- découper un script en fichiers avec export/import ;
- distinguer export nommé et export par défaut ;
- comprendre comment un chemin local est résolu.
Le problème du fichier unique
Votre serveur fait tout : routes, validation, base, réponses. À mesure que ça grandit, le fichier devient illisible. Les modules permettent de découper : chaque fichier expose ce qu'il veut, importe ce dont il a besoin.
fonction → fichier → module → plusieurs modules → package
Exporter
// math.js
export function addition(a, b) {
return a + b;
}
export function soustraction(a, b) {
return a - b;
}
export const VERSION = "1.0"; // une valeur aussi peut s'exporter
Chaque nom exporté est accessible individuellement : c'est l'export nommé (plusieurs par fichier).
Importer
// app.js
import { addition, VERSION } from "./math.js";
console.log(addition(2, 3), VERSION);
Le ./ signifie « fichier voisin » : la résolution est relative au fichier courant. Sans extension ambiguïté possible, soyez explicite (./math.js).
L'export par défaut
Un fichier peut désigner UNE valeur principale :
// db.js
export default class BaseDeDonnees { ... }
import Base from "./db.js"; // n'importe quel nom local
import { creerTache } from "./db.js"; // ...et ses exports nommés en plus
Convention du cours : export par défaut pour « l'unique sujet » d'un fichier (une classe, un composant) ; exports nommés pour les utilitaires multiples. Dans les doutes, préférez les nommés : les autocomplétions et refactorings y sont plus fiables.
Ce qui se passe à l'exécution
node app.js
↓ lit app.js
trouve import "./math.js"
↓ charge et évalue math.js (une seule fois !)
exécute app.js avec les liaisons résolues
Détail important : un module n'est évalué qu'une fois par processus ; ses exports sont partagés entre tous les importeurs — c'est ainsi qu'un module de configuration devient naturellement un singleton.
Exercice
- Extrayez
repondreJSONetlireCorpsde votre serveur danshttp-utilitaires.js. - Extrayez tout le SQL dans
db.js(si ce n'est déjà fait) et importez-le. - Ajoutez
constantes.jsavec PORT et LIMITES ; utilisez-les partout. - Que se passe-t-il si deux fichiers importent le même module ?
Résumé
- export/import = découpage propre ;
./= relatif au fichier. - Nommé pour plusieurs utilitaires, défaut pour l'unique sujet.
- Un module s'évalue une fois : ses exports sont partagés.
Correction disponibleCherchez d’abord par vous-même.Voir la correction
Correction
Réponses détaillées
Question 4. Il n'est chargé qu'une seule fois : les deux importeurs reçoivent les mêmes valeurs. Testez avec un module qui logge son chargement : un seul log quel que soit le nombre d'importeurs.