web-dev-qa-db-ja.com

ES6構文と動的パスを使用したモジュールのインポート

これは動作します:

import app from './../app.js';

しかし、これはそうではありません:

import app from path.join(process.cwd(), 'app');

私が取得しています:

SyntaxError: /path/file.js: Unexpected token (5:16)
> 5 | import app from path.join(process.cwd(), 'app');
    |                 ^

「動的」パスを使用することは可能ですか(および/またはどのように)? (パスをハードコーディングしたり、相対パスに依存しない)。

47
Félix Sanz

いいえ、これは不可能です。 ES6モジュールは、importステートメントが確実に機能するように、モジュールコードを実行せずに、依存関係を静的に解決できる必要があります。モジュール指定子は文字列リテラルでなければなりません。

ただし、選択したモジュールローダーは、変数名を持つモジュールの動的ロードをサポートする必要があります。ただし、モジュールスコープでバインドされたapp識別子を取得することはできません(再エクスポートできません)。通常、コールバックなどでのみ使用できます。

52
Bergi

ES6インポートは宣言型であり、静的分析を目的としています。動的にすることはできません。

一般に、条件付きインポートがある場合、静的パスに基づいてロードするモジュールを決定するのは、基礎となるパス解決ロジックの責任であると予想されます。

または、宣言的なインポートではなく、非同期モジュールローダーを使用します。

12
loganfsmyth