MDN wants to learn about developers like you: https://qsurvey.mozilla.com/s3/MDN-survey

L'instruction export est utilisée lors de la création de modules JavaScript pour exporter des fonctions, des objets ou des valeurs primitives à partir du modules, de sorte qu'ils puissent être utilisés par d'autres programmes grâce à l'instruction import.

Cette fonctionnalité n'est implémentée nativement que dans Safari et Chrome à cet instant. Elle est implémentée dans de nombreux transpileurs comme  Traceur, Babel ou Rollup.

Syntaxe

export { nom1, nom2, …, nomN };
export { variable1 as nom1, variable2 as nom2, …, nomN };
export let nom1, nom2, …, nomN; // fonctionne également avec var
export let nom1 = …, nom2 = …, …, nomN; // également avec var, const
export function nomFonction() { … };
export class nomClasse { … };

export default expression;
export default function (…) { … } // également avec class, function*
export default function nom1(…) { … } // également avec class, function*
export { nom1 as default, … };

export * from …;
export { nom1, nom2, …, nomN } from …;
export { import1 as nom1, import2 as nom2, …, nomN } from …;
nomN
Identifiant à exporter (afin qu'il puisse être importé via import dans un autre script).

Description

Il existe deux types d'export différents. Chaque type correspond à une des syntaxes ci-dessus :

  • Les exports nommés :
    // exporte une fonction déclarée précédemment
    export { maFonction };
    
    // exporte une constante
    export const machin = Math.sqrt(2);
  • Les exports par défaut (fonction) :
    export default function() {} 
  • Les exports par défaut (classe) :
    export default class {} 

Les exports nommés sont utiles pour exporter plusieurs valeurs. Lors de l'importation, il est obligatoire d'utiliser le même nom de l'objet correspondant.

Mais un export par défaut peut être importé avec n'importe quel nom, par exemple :

export default k = 12; // dans le fichier test.js
import m from './test' // notez que nous avons la liberté d'utiliser import m au lieu de import k, parce que k était l'export par défaut
console.log (m); // enregistrera 12

Il ne peut y avoir qu'une seule exportation par défaut.

La syntaxe suivante n'exporte pas depuis le module importé :

export * from …;

Si vous avez besoin d'exporter le défaut, écrivez ce qui suit à la place :

import mod from 'mod';
export default mod;

Exemples

Utilisation d'exports nommés

Dans le module, on pourra utiliser le code suivant :

// module "mon-module.js"
function cube(x) {
  return x * x * x;
}
const machin = Math.PI + Math.SQRT2;
export { cube, machin };

De cette façon, dans un autre script, on pourra avoir :

import { cube, machin } from 'mon-module';
console.log(cube(3)); // 27
console.log(machin);    // 4.555806215962888

Utilisation d'exports par défaut

Si on souhaite n'exporter qu'une seule valeur ou avoir une valeur de secours pour le module, on peut utiliser un export par défaut :

// module "mon-module.js"
export default function cube(x) {
  return x * x * x;
}

Alors, dans un autre script, il sera facile d'importer l'export par défaut :

import cube from 'mon-module';
console.log(cube(3)); // 27

Notez qu'il n'est pas possible d'utiliser var, let ou const avec export default.

Spécifications

Spécification Statut Commentaire
ECMAScript 2015 (6th Edition, ECMA-262)
La définition de 'Exports' dans cette spécification.
Standard Définition initiale
ECMAScript Latest Draft (ECMA-262)
La définition de 'Exports' dans cette spécification.
Projet  

Compatibilité des navigateurs

FonctionnalitéChromeEdgeFirefoxInternet ExplorerOperaSafari
Support simple61

16

151

542 Non4710.1
FonctionnalitéAndroid webviewChrome for AndroidEdge mobileFirefox for AndroidOpera AndroidiOS SafariSamsung Internet
Support simple Non61 Oui5424710.1 ?

1. From version 15: this feature is behind the Experimental JavaScript Features preference.

2. From version 54: this feature is behind the dom.moduleScripts.enabled preference. To change preferences in Firefox, visit about:config.

Voir aussi

Étiquettes et contributeurs liés au document

 Contributeurs à cette page : SphinxKnight, NemoNobobyPersonne, kuashe, teoli
 Dernière mise à jour par : SphinxKnight,