Alier.export()
指定の機能をエクスポートします。
エクスポートされた機能は Alier.import() によって利用可能になります。
この関数はモバイル版において、ECMAScript の export 宣言の代替として、モジュールスクリプトから機能(関数、クラス、オブジェクト、定数など)をそのモジュールの外部で利用可能にするために利用します。
この関数は非同期関数です。
- この関数はモバイル版でのみ使えます。
構文
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>
エクスポート完了時に履行されるプロミスです。
- このプロミスは必ず待ち合わせてください。モジュールスクリプトの実行完了とエクスポートの完了が同期されていない場合、予期しない動作を引き起こす可能性があります。特に引数
fromModuleを使用する場合、fromModuleが参照するモジュールのインポート処理が行われます。これは非同期処理であるため、Alier.export()の待ち合わせを行わない場合、内部でのインポート処理が終わる前に次の処理が実行されることになります。
例外
TypeError- 引数
exportMapにnullやオブジェクトではない値が与えられた場合。 - 引数
fromModuleにnullまたは文字列以外の値が与えられた場合。
- 引数
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.js で MyAppViews.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 が認められています)。待ち受けなかった場合の動作は保証されていません。
- モジュールスクリプト内の
main関数は、エクスポートの対象に含めていなくても(つまり引数exportMapで指定されていなくても)自動的にエクスポートされます。これは通常のAlier.import()の結果として利用されることはありませんが、main.jsに記述した場合、アプリケーションのエントリポイントとして利用されます。 - モバイル版においてはアプリケーションに同梱されたモジュールスクリプトをローカルファイルとして参照する必要があります。ECMAScript の
import宣言やimport()式はローカルにおかれたスクリプトファイルの読み込みに制限があり、Alier.import()およびAlier.export()はこの制限を回避するために用意されています。