Les modules

Jusqu’à ES6, JavaScript ne disposait ni d’un mécanisme de déclaration d’un espace de noms ni de la possibilité d’importer un fichier source depuis un autre fichier source. Plusieurs développeurs et plusieurs frameworks ont proposé des solutions mais ES6 fournit maintenant la notion de module.

Avertissement

Les modules sont bien supportés par les navigateurs Web les plus récents. Cependant, pour certains outils, leur usage est encore expérimental. Ainsi, avec Node.js, les fichiers modules doivent avoir l’extension .mjs et vous devez lancer l’exécutable node avec l’option –experimental-modules.

Exporter

Un module est stocké dans un fichier avec l’extension .js. Un module représente un espace de déclaration pour lequel le développeur décide des noms qui sont exportés (c’est-à-dire qui sont visibles depuis d’autres fichiers .js). Pour cela, on utilise le mot-clé export.

Exemple fichier mon_module.js
function fonction_pas_exportee() {
    // ...
}

function fonction_exportee() {
    // ...
}

export function autre_fonction_exportee() {
    // ...
}

export const auteur = "David Gayerie";
export {fonction_exportee};

Seules les variables et les fonctions exportées seront accessibles depuis d’autres fichiers sources.

Export par défaut

Il est possible d’exporter un seul élément par défaut (qu’il s’agisse d’une fonction ou d’une variable).

export default function() {
    // ...
}

Importer

Pour accéder aux éléments exportés d’un module, on utilise le mot-clé import.

Pour importer un élément précis :

import {auteur} from "mon-module.js";

Pour importer plusieurs éléments :

import {auteur, fonction_exportee}  from "mon-module.js";

Pour importer tous les éléments dans un objet appelé x :

import * as x from "mon-module.js";

Pour importer l’élément par défaut avec l’alias x :

import x from "mon-module.js";