export 文は、モジュールから関数、オブジェクト、プリミティブな値をエクスポートするための JavaScript モジュールを作成するときに使用します。これらは別のプログラムで、 import 文で使用できます。

エクスポートされたモジュールは宣言のあるなしにかかわらず strict mode で動作します。エクスポートされた文は、埋め込まれたスクリプトでは使えません。

構文

export { name1, name2, …, nameN };
export { variable1 as name1, variable2 as name2, …, nameN };
export let name1, name2, …, nameN; // var, const も使用可
export let name1 = …, name2 = …, …, nameN; // var, const も使用可
export function FunctionName(){...}
export class ClassName {...}

export default expression;
export default function (…) { … } // class, function* も使用可
export default function name1(…) { … } // class, function* も使用可
export { name1 as default, … };

export * from …;
export { name1, name2, …, nameN } from …;
export { import1 as name1, import2 as name2, …, nameN } from …;
export { default } from …;
nameN
(別のスクリプトで import を使用してインポートできるようにするため) エクスポートする識別子。

説明

エクスポート方法は、名前付きデフォルトの 2 種類あります。名前付きエクスポートはモジュールごとに複数持てますが、デフォルトエクスポートは 1 つに限ります。それぞれのエクスポート方法は、上記の構文のひとつに対応します:

  • 名前付きエクスポート:
    // 前に宣言した関数をエクスポート
    export { myFunction }; 
    
    // 定数をエクスポート
    export const foo = Math.sqrt(2);
  • デフォルトエクスポート (function):
    export default function() {} 
  • デフォルトエクスポート (class):
    export default class {} 

名前付きエクスポートは、さまざまな値をエクスポートするのに役立ちます。インポートするときに、対応するオブジェクトと同じ名前を使用しなければなりません。

一方、デフォルトエクスポートは以下のように任意の名前を使用できます:

let k; export default k = 12; // test.js でエクスポート

import m from './test' // k はデフォルトエクスポートであるため、import k の代わりに import m も自由に使える

console.log(m);        // log 12 になる

次の構文はインポートしたモジュールのデフォルトエクスポートをエクスポートしません:

export * from …;

もしデフォルトエクスポートをエクスポートする必要がある場合、代わりに次のコードを使用してください:

import mod from 'mod';
export default mod;

名前付きエクスポートを使用する

モジュール側で以下のコードを使用します:

// module "my-module.js"
function cube(x) {
  return x * x * x;
}
const foo = Math.PI + Math.SQRT2;
var graph = {
    options:{
        color:'white',
        thickness:'2px'
    },
    draw: function(){
        console.log('From graph draw function');
    }
}
export { cube, foo, graph };

この方法では、別のスクリプトで以下のように使用できます:

//You should use this script in html with the type module ,
//eg ''<script type="module" src="demo.js"></script>",
//open the page in a httpserver,otherwise there will be a CORS policy error.
//script demo.js

import { cube, foo, graph } from 'my-module';
graph.options = {
    color:'blue',
    thickness:'3px'
}; 
graph.draw();
console.log(cube(3)); // 27
console.log(foo);    // 4.555806215962888

デフォルトエクスポートを使用する

値をひとつエクスポートしたい、あるいはモジュールでフォールバック先の値を持ちたい場合は、デフォルトエクスポートを使用するとよいでしょう:

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

別のスクリプトでは、デフォルトエクスポートのインポートは簡単です:

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

varletconstexport default とともに使えないことに注意してください。

仕様

仕様書 策定状況 コメント
ECMAScript 2015 (6th Edition, ECMA-262)
Exports の定義
標準 最初期の定義
ECMAScript Latest Draft (ECMA-262)
Exports の定義
ドラフト  

ブラウザー実装状況

Update compatibility data on GitHub
デスクトップモバイルサーバー
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewAndroid 版 ChromeEdge MobileAndroid 版 FirefoxAndroid 版 OperaiOS 版 SafariSamsung InternetNode.js
基本対応Chrome 完全対応 61Edge 完全対応 16
完全対応 16
完全対応 15
無効
無効 From version 15: this feature is behind the Experimental JavaScript Features preference.
Firefox 完全対応 60
完全対応 60
未対応 54 — 60
無効
無効 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 未対応 なしOpera 完全対応 47Safari 完全対応 10.1WebView Android 未対応 なしChrome Android 完全対応 61Edge Mobile 完全対応 ありFirefox Android 完全対応 60
完全対応 60
未対応 54 — 60
無効
無効 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 完全対応 47Safari iOS 完全対応 10.1Samsung Internet Android 未対応 なしnodejs ?

凡例

完全対応  
完全対応
未対応  
未対応
実装状況不明  
実装状況不明
ユーザーが明示的にこの機能を有効にしなければなりません。
ユーザーが明示的にこの機能を有効にしなければなりません。

関連情報

ドキュメントのタグと貢献者

このページの貢献者: nack43, yyss, Flat, YuichiNukiyama, lv7777, teoli, ethertank, Mgjbot, Nanto vi
最終更新者: nack43,