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()
はこの制限を回避するために用意されています。