Alier.import()
指定のソースファイルの機能(関数、クラス、オブジェクト、定数など)をインポートします。
インポートできる機能はソースファイル中で呼び出される Alier.export()
によって決められます。
この関数はモバイル版において、ECMAScript の import()
式の代替として、指定のモジュールスクリプトが提供する機能(関数、クラス、オブジェクト、定数など)を利用可能にするために利用します。
この関数は非同期関数です。
構文
Alier.import(filepath) => Promise<object>
引数
-
filepath
:string
ソースファイルのパスです。相対パスを指定した場合、
/app_res/
を基準とするパスとして解決されます。
返値: Promise<object>
インポートされたモジュールの名前空間オブジェクトを返すプロミスです。
名前空間オブジェクトが持つプロパティは、対象のモジュールファイルから呼び出される Alier.export()
によって決まります。エクスポートされた機能はそれぞれ、Alier.export()
の引数 exportMap
で指定した名前で名前空間オブジェクトに登録されます。
名前空間オブジェクトはプロトタイプを持たず(null prototype)、封印(sealed)されています。また、各プロパティの順序は辞書式順序に整列されています。
- 封印されたオブジェクトとは、拡張不可(non-extendable)であり、かつすべてのプロパティが構成不可(non-configurable)であるオブジェクトのことです。
- 拡張不可なオブジェクトに対してプロパティを新たに追加することはできません
- 構成不可なプロパティを削除することはできません
- 構成不可と書き込み不可は別の属性です。構成不可であっても書き込み可能であれば、値の変更が可能です。
- 名前空間オブジェクトの性質は ECMAScript の
import()
式の仕様に準じています。
例外
TypeError
- 引数
filepath
が文字列でなかった場合。
- 引数
SyntaxError
- 引数
filepath
に該当するソースファイルが存在しなかった場合。
- 引数
例
以下では、MyModule.js
からエクスポートされた機能を MyApp.js
でインポートする例を示します。
MyModule.js
で実装した機能を外部で使えるようエクスポートするには以下のようにします。
class MyClass { /* MyClass の実装 */ }
function myFunction() { /* myFunction の実装 */ }
const poorPi = 3.1416; // 精度の悪い円周率の近似値
// エクスポート
// モジュールスクリプトの実行完了とエクスポートの完了を同期させるため、
// Alier.export() の結果は常に await する必要があります。
// 以下では { x } のオブジェクトリテラルに変数名を並べていますが、
// これは { x: x } の略記です。
await Alier.export({ MyClass, myFunction, poorPi });
MyApp.js
で MyModule.js
からエクスポートされた機能を利用するには以下のようにします。
// MyModule.js からインポート
// poorPi のみ PI という変数名でインポートしています。
// これは JavaScript の分割代入の機能を利用しています。
const { MyClass, myFunction, poorPi: PI } = await Alier.import("./MyModule.js");
インポートした機能をグローバルスコープから参照するには、globalThis
へ代入する必要があります。
// グローバルスコープへのインポート
// ブラウザ上では globalThis は window と同一のオブジェクトです。
Object.assign(globalThis, await Alier.import("./MyModule.js"));
解説
指定のソースファイルの機能(関数、クラス、オブジェクト、定数など)をインポートします。
インポートできる機能はソースファイル中で呼び出される Alier.export()
によって決められます。
インポートは非同期に行われます(Alier.import()
は Promise
を返します)。インポートした機能を利用する場合には、必ず await
で結果を待ち受けなければなりません。
- モジュールスクリプト内の
main
関数は、エクスポートの対象に含めていなくても(つまり `Alier.export() の引数exportMap
で指定されていなくても)自動的にエクスポートされます。これは通常のAlier.import()
の結果として利用されることはありませんが、main.js
に記述した場合、アプリケーションのエントリポイントとして利用されます。 - モバイル版においてはアプリケーションに同梱されたモジュールスクリプトをローカルファイルとして参照する必要があります。ECMAScript の
import
宣言やimport()
式はローカルにおかれたスクリプトファイルの読み込みに制限があり、Alier.import()
およびAlier.export()
はこの制限を回避するために用意されています。