Alier.export()

指定の機能をエクスポートします。 エクスポートされた機能は Alier.import() によって利用可能になります。

この関数はモバイル版において、ECMAScript の export 宣言の代替として、モジュールスクリプトから機能(関数、クラス、オブジェクト、定数など)をそのモジュールの外部で利用可能にするために利用します。

この関数は非同期関数です。

note
  • この関数はモバイル版でのみ使えます。

構文

Alier.export(exportMap) => Promise<void>
Alier.export(exportMap, fromModule) => Promise<void>

引数

  • exportMap: Map<string, any> | object | Array<Array<any>>

    機能の別名をキーとするマップオブジェクトです。

    引数 fromModule が指定されていない場合、エクスポートする機能(関数、クラス、オブジェクト、定数など)そのものをマップの値に指定します。引数 fromModule が指定されている場合、fromModule で指定したモジュールからエクスポートされている機能の名前をマップの値に指定します。

    マップオブジェクトとしては Map インスタンス、プレーンオブジェクト、配列を使うことができます。 プレーンオブジェクト(object)を使う場合、そのプロパティ名が機能の別名として扱われます。プロパティの値は機能またはエクスポート元からの別名です。 配列(Array)を使う場合、配列の各要素はキーと値の組の2要素配列([key, value] の形)になっていなければなりません。

  • fromModule: string | undefined

    エクスポート元のモジュールファイルのパスです。

    引数 fromModule が指定された場合、対象のモジュールをインポートし(Alier.import() を参照)、その中から引数 exportMap で指定された名前の機能を再エクスポートします。

    この引数は省略可能です。

返値: Promise<void>

エクスポート完了時に履行されるプロミスです。

warning
  • このプロミスは必ず待ち合わせてください。モジュールスクリプトの実行完了とエクスポートの完了が同期されていない場合、予期しない動作を引き起こす可能性があります。特に引数 fromModule を使用する場合、fromModule が参照するモジュールのインポート処理が行われます。これは非同期処理であるため、Alier.export() の待ち合わせを行わない場合、内部でのインポート処理が終わる前に次の処理が実行されることになります。

例外

  • TypeError
    • 引数 exportMapnull やオブジェクトではない値が与えられた場合。
    • 引数 fromModulenull または文字列以外の値が与えられた場合。
  • SyntaxError
    • モジュールスクリプト外で呼び出された場合。
    • 引数 fromModule に該当するソースファイルが存在しなかった場合。
    • 引数 fromModule でインポートされたモジュールから exportMap で指定された機能がエクスポートされなかった場合。
    • 引数 exportMap で指定された別名がすでに別に機能で使用されていた場合。ただし、同名で同じ機能であれば発生しません。

以下では、ItemBox.js, MyAppViews.js, MyApp.js の3つのファイルの間での、機能のエクスポートおよび再エクスポートとインポートの例を示します。

ItemBox.js で実装した機能を外部で使えるようエクスポートするには以下のようにします。

const { ViewLogic } = await Alier.import("alier_sys/ViewLogic.js");

class ItemBox extends ViewLogic { /* ItemBox の実装 */ };

//  現在のモジュールからエクスポート
//  モジュールスクリプトの実行完了とエクスポートの完了を同期させるため、
//  Alier.export() の結果は常に await する必要があります。
await Alier.export({ logic: ItemBox });

ItemBox.js からエクスポートされた機能に別名をつけて、MyAppViews.js から再エクスポートするには以下のようにします。

//  外部モジュールからのエクスポート
//  ItemBox.js からエクスポートされた logic を UserItemBox という
//  別名で再エクスポートしています。
await Alier.export({ UserItemBox: "logic" }, "./ItemBox.js");

MyApp.jsMyAppViews.js からエクスポートされた機能を利用するには以下のようにします。

//  MyAppViews.js から UserItemBox をインポート
//  これは ItemBox.js で logic としてエクスポートされた ItemBox クラス
//  と同一のものです。
const { UserItemBox } = await Alier.import("./MyAppViews.js");

解説

指定の機能をエクスポートします。 エクスポートされた機能は Alier.import() によって利用可能になります。

この関数はモジュールスクリプト外のコンテキストでは利用できません。インポート対象となるスクリプト以外に記述した場合、実行時エラーとなります。

この関数は、引数 fromModule が指定されたかどうかによって異なる動作をします。

  • fromModule が指定された場合

    fromModule が示すモジュールファイルからエクスポートされた機能(関数、クラス、オブジェクト、定数など)について、引数 exportMap で指定された別名をつけて再エクスポートします。引数 exportMap のキーは再エクスポート時に使われる別名で、値は元のモジュールから与えられた機能名です。

  • fromModule が指定されていない場合

    exportMap として渡された機能(関数、クラス、オブジェクト、定数など)をモジュールの名前空間オブジェクトに登録します。exportMap の値は宣言された機能の実体で、キーはその機能の別名です。

引数 fromModule を利用する場合、モジュールのインポートが発生し、非同期処理が行われます。そのため、Alier.export() は非同期関数として定義されています。

エクスポートの完了を待ち受けるには、Alier.export()await しなければなりません(モジュールスクリプトでは最上位での await が認められています)。待ち受けなかった場合の動作は保証されていません。

note
  • モジュールスクリプト内の main 関数は、エクスポートの対象に含めていなくても(つまり引数 exportMap で指定されていなくても)自動的にエクスポートされます。これは通常の Alier.import() の結果として利用されることはありませんが、main.js に記述した場合、アプリケーションのエントリポイントとして利用されます。
  • モバイル版においてはアプリケーションに同梱されたモジュールスクリプトをローカルファイルとして参照する必要があります。ECMAScript の import 宣言や import() 式はローカルにおかれたスクリプトファイルの読み込みに制限があり、Alier.import() および Alier.export() はこの制限を回避するために用意されています。