ECMAScript 2015の仕様書を読む(その5)

 ECMAScript 2015の仕様書(ECMA-262)を読んでいます。今回はモジュールの説明がある第15章。新機能であるモジュールのexport/importについて説明されている。

第15章

 スクリプトとモジュールについて。ESMAScript 2015では新たにモジュールという概念が投入されている。モジュールではexportやimport文を使ってモジュール外からアクセスできる要素を指定できる。

 import文では、ほかのモジュール内のメソッドやプロパティを現在のモジュール内で参照できるよう読み込むことができる。まず、下記のようにすると指定したモジュールがインポートされる。

import モジュール名

 また、次のようにしてモジュール内の指定した要素のみをインポートできる。

import 要素 from モジュール名
import * as 名前 from モジュール名
import {} from モジュール名
import {インポートする要素1 [, 要素2 [,...]]} from モジュール名
 from モジュール名

 要素の後に「as 名前」を続けることでインポートする要素を参照するための名前を指定できる。

 export文では、モジュールで公開する要素を指定できる。

export * from モジュール名;
export {要素1 [, 要素2, [,...]} from モジュール名;
export {要素1 名前[, 要素2, [,...]} from モジュール名;
export {要素1 [, 要素2, [,...]};
export 変数
export 宣言
export default 各種宣言

 要素の後に「as 名前」を続けることでエクスポートする要素を参照するための名前を指定できる。

 それぞれの挙動の違いは、15.2.1.16で説明されているが、次のような解釈になる。

import v from "mod";

 →modモジュールのdefaultオブジェクトをvという名前で参照可能にする

import * as ns from "mod";

 →modモジュールのオブジェクトをnsオブジェクト経由で参照可能にする

import {x} from "mod";

 →modモジュールのxオブジェクトをxという名前で参照可能にする

import {x as v} from "mod";

 →modモジュールのxオブジェクトをvという名前で参照可能にする

import "mod";

 →modモジュールを読み込むがいずれのオブジェクトも参照可能とはしない

export var v;

 →モジュールのvオブジェクトをvという名前で参照可能にする

export default function f() {};

 →モジュールの関数fをdefaultという名前で参照可能にする

export default function () {};
export default 42;

 →指定した関数や値をdefaultという名前で参照可能にする

export {x};

 →xオブジェクトをxという名前で参照可能にする

export {v as x};

 →vオブジェクトをxという名前で参照可能にする

export {x} from "mod";

 →指定したモジュールのxオブジェクトをxという名前で参照可能にする

export {v as x} from "mod";

 →指定したモジュールのvオブジェクトをxという名前で参照可能にする

export * from "mod";

 →指定したモジュールのすべてのオブジェクトを参照可能にする