export

O export é utilizado quando criamos módulos JavaScript para permitir que suas funções, objetos ou valores primitivos sejam utilizados por outros scripts através de import  

Módulos exportados ficam em strict mode, independentemente se é declarado dessa forma, ou não. Export não pode ser utilizado em scripts embutidos.

Observação: Por enquanto esse recurso não está implementado nativamente em navegadores. Ele é implementado em vários transpiladores, tais como Traceur CompilerBabel ou Rollup.

Sintaxe

// Exportando recursos individuais
export { name1, name2, …, nameN }; // também var, const
export { variable1 as name1, variable2 as name2, …, nameN }; // também var, const
export function functionName(){...}
export class ClassName {...}

// Exportando listas 
export { name1, name2, …, nameN }; 

// Renomeando exportações
export { variable1 as name1, variable2 as name2, …, nameN };

// Exportações default
export default expression;
export default function (…) { … } // também class, function*
export default function name1(…) { … } // também class, function*
export { name1 as default, … };

// Agregando módulos
export * from …;
export { name1, name2, …, nameN } from …;
export { import1 as name1, import2 as name2, …, nameN } from …;
nameN
Identificador para ser exportado (assim ele pode ser importado via import em outro script).

Descrição

Há dois diferentes tipos de export, explícito(named) e padrão(default).  Pode-se ter várias exportações explícitas por módulo, mas apenas uma padrão. Cada tipo corresponde à uma da síntaxe acima:

  • Exportações nomeadas:
    // exporta uma função definida anteriormente
    export { myFunction }; 
    
    // exporta uma constante
    export const foo = Math.sqrt(2); 
  • Exportação padrão (pode ser feita apenas uma por script):
    // exporta um objeto previamente definido
    export default MyObject;
    
    // exporta uma função ou classe
    export default class {}
    

Exportações explícitas são úteis para exportar vários valores. Durante a importação, alguém vai ser capaz de usar o mesmo nome para referir ao valor correspondente.

Mas a exportação padrão só pode ser feita uma vez em cada módulo, aceitando qualquer tipo de valor, recusando o uso de var, let ou const.

Exemplos

Usando exportações nomeadas

Nesse módulo poderiamos usar o seguinte código:

// módulo "my-module.js"
function cube(x) {
  return x * x * x;
}
const foo = Math.PI + Math.SQRT2;
export { cube, foo };

Desta maneira, em outro script (cf. import), nós poderiamos usar:

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

Usando a exportação padrão

Se queremos exportar um valor sozinho ou obter um valor de reserva para o nosso módulo, nós poderiamos usar export default:

// módulo "my-module.js"
export default function cube(x) {
  return x * x * x;
}

Daí em outro script podemos usar:

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

Especificações

Especificação Estado Comentário
ECMAScript 2015 (6th Edition, ECMA-262)
The definition of 'Exports' in that specification.
Padrão Initial definition.
ECMAScript Latest Draft (ECMA-262)
The definition of 'Exports' in that specification.
Rascunho

Compatibilidade

Update compatibility data on GitHub
DesktopMobileServer
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewChrome for AndroidFirefox for AndroidOpera for AndroidSafari on iOSSamsung InternetNode.js
exportChrome Full support 61Edge Full support 16
Full support 16
Full support 15
Disabled
Disabled From version 15: this feature is behind the Experimental JavaScript Features preference.
Firefox Full support 60
Full support 60
No support 54 — 60
Disabled
Disabled From version 54 until version 60 (exclusive): this feature is behind the dom.moduleScripts.enabled preference. To change preferences in Firefox, visit about:config.
IE No support NoOpera Full support 47Safari Full support 10.1WebView Android No support NoChrome Android Full support 61Firefox Android Full support 60
Full support 60
No support 54 — 60
Disabled
Disabled From version 54 until version 60 (exclusive): this feature is behind the dom.moduleScripts.enabled preference. To change preferences in Firefox, visit about:config.
Opera Android Full support 44Safari iOS Full support 10.3Samsung Internet Android Full support 8.0nodejs ?

Legend

Full support  
Full support
No support  
No support
Compatibility unknown  
Compatibility unknown
User must explicitly enable this feature.
User must explicitly enable this feature.

Veja também