Passer au contenu principal
eLearner.app
Module 8 · Leçon 1 sur 429/32 dans le cours~12 min
Leçons du module (1/4)

Modules ESM : import / export

Lorsqu'un programme grandit, tout garder dans un seul fichier devient peu pratique. Le JavaScript moderne résout ce problème avec les modules ES (ESM) : chaque fichier est un module qui peut exporter des fonctions, des constantes, des classes, et d'autres fichiers peuvent les importer.

export

Vous exportez ce que vous voulez rendre public. Deux formes :

JS
// somma.js
export function somma(a, b) {
  return a + b;
}

export const PI = 3.14159;

Ou encore, en bas de fichier :

JS
function somma(a, b) {
  return a + b;
}
const PI = 3.14159;
export { somma, PI };

import

Depuis un autre fichier :

JS
// app.js
import { somma, PI } from './somma.js';

console.log(somma(1, 2)); // 3
console.log(PI); // 3.14159

L'objet { somma, PI } est la liste des noms que vous souhaitez importer. Ils doivent correspondre aux noms exportés.

Default export (Export par défaut)

Chaque module peut avoir un export « principal », anonyme :

JS
// log.js
export default function log(msg) {
  console.log('[app]', msg);
}

On l'importe en choisissant le nom localement :

JS
import log from './log.js';
log('ciao');

Renommer

JS
import { somma as plus } from './somma.js';
export { somma as add } from './somma.js'; // re-export

Un seul « namespace » par fichier

Les modules sont isolés : une variable déclarée dans un fichier ne se retrouve pas dans la portée globale (global). Vous devez l'exporter explicitement pour la rendre visible ailleurs. C'est une amélioration considérable par rapport à l'ancien JS où chaque balise <script> partageait l'objet window.

À vous de jouer

Dans les exercices ci-dessous, vous n'écrirez pas la syntaxe réelle import/export — le bac à sable (sandbox) étant constitué d'un seul fichier. Nous vous demanderons plutôt d'organiser le code en petites fonctions séparées qui collaborent, comme vous le feriez si chacune se trouvait dans un fichier différent.

Exercice#js.m8.l1.e1
Tentatives : 0Chargement…

Définissez deux fonctions distinctes : `square(n)` (retourne n*n) et `sumOfSquares(a, b)` qui utilise square. Considérez square comme si elle était « exportée » d'un fichier et réutilisée par sumOfSquares.

Chargement de l'éditeur…
Afficher l'indice

sumOfSquares(a,b) = square(a) + square(b)

Solution disponible après 3 tentatives

Exercice de révision

Exercice#js.m8.l1.e2
Tentatives : 0Chargement…

Définissez `isEven(n)` (true si n est pair) et `countEven(arr)` qui utilise isEven pour compter les éléments pairs d'un tableau. Gardez-les sous forme de deux fonctions distinctes.

Chargement de l'éditeur…
Afficher l'indice

arr.filter(isEven).length

Solution disponible après 3 tentatives