Get to know MDN better
このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docs コミュニティーについてもっと知り、仲間になるにはこちらから。
この機能は広く実装されており、多くのバージョンの端末やブラウザーで動作します。2018年5月以降、すべてのブラウザーで利用可能です。
export 宣言は、JavaScript モジュールから値をエクスポートするために使用されます。エクスポートされた値は import 宣言やダイナミックインポートによって、他のプログラムにインポートすることができます。インポートされたバインディングの値は、それをエクスポートするモジュールの変更の対象となります。モジュールがエクスポートするバインディングの値を更新すると、その更新はインポートされた値として見えます。
ソースファイルで export 宣言を使用するためには、そのファイルはランタイムによってモジュールとして解釈される必要があります。HTML では、<script> タグに type="module" を追加するか、他のモジュールにインポートされることで実現されます。モジュールは自動的に厳格モードで解釈されます。
エクスポートする識別子(他のスクリプトで import を介してインポートできるようにするため)。as でエイリアスを使用する場合、実際にエクスポートされる名前を文字列リテラルで指定することができますが、これは有効な識別子とは限りません。
各モジュールでは、2 つの異なる種類のエクスポート、名前付きエクスポートとデフォルトエクスポートを行うことができます。名前付きエクスポートはモジュールごとに複数持てますが、デフォルトエクスポートは 1 つのみです。それぞれのエクスポート方法は、上記の構文のひとつに対応します。
名前付きエクスポート:
export キーワードの後には、 let, const, var 宣言や、関数、クラス宣言を使用することができます。また、 export { name1, name2 } 構文を使用すると、他の場所で宣言された名前のリストをエクスポートすることができます。export {} は空のオブジェクトをエクスポートするわけではないことに注意してください。これは何もエクスポートしない(空の名前のリストをエクスポートする)ノーオペレーション宣言です。
export は、using または await using 宣言では使用できません。ただし、using または await using で宣言された変数をエクスポートすることは可能です。ただし、この方法は極力避けるべきです。変数はモジュールの実行が終了するとすぐに破棄されるため、インポート元はすべて既に破棄された値を受け取ることになるからです。
エクスポート宣言は一時的なデッドゾーンのルールには従いません。X という名前自体が宣言される前に、そのモジュールが X をエクスポートすることを宣言することができます。
デフォルトエクスポート:
メモ: エクスポート宣言の名前は、互いに異なるものでなければなりません。重複した名前でエクスポートを実施したり、default のエクスポートを複数使用すると SyntaxError が発生し、モジュールが評価されなくなります。
export default 構文ではあらゆる式が許可されます。
特殊なケースとして、関数やクラスは式ではなく 宣言 としてエクスポートされ、これらの宣言は無名にすることができます。つまり、関数は巻き上げが行われることになります。
名前付きエクスポートは、複数の値をエクスポートする必要がある場合に有益です。このモジュールをインポートするときは、名前付きエクスポートでは全く同じ名前で参照しなければなりませんが(任意で as で名前を変更できます)、デフォルトエクスポートは何か名前を付けてインポートすることができます。例を示します。
名前の競合を防ぐために、名前付きエクスポートの名前を変更することもできます。
文字列リテラルを使用すると、名前を有効な識別子以外のものに変更することができます。例えば次のようします。
親モジュール内の異なるモジュールから「インポート/エクスポート」して、そのモジュールからインポートできるようにすることも可能です。言い換えれば、様々なモジュールからの様々なエクスポートを集約した 1 つのモジュールを作成することができます。
これは "export from" 構文で実現できます。
これは、 function1 と function2 がカレントモジュール内で利用できないことを除けば、import と export の組み合わせと同じです。
ほとんどの "import from" 構文には対応する "export from" 構文があります。
また、import * from "mod" はありませんが、export * from "mod" はあります。これで mod からのすべての 名前付き エクスポートが現在のモジュールの名前付きエクスポートとして再エクスポートされますが、 mod のデフォルトエクスポートは再エクスポートされません。もし、暗黙のうちに同じ名前を再エクスポートする 2 つのワイルドカードの export 文があった場合、どちらも再エクスポートされません。
重複した名前を直接インポートしようとすると、エラーが発生します。
以下は、import に対応するものですが、構文的には無効です。
正しい方法は、エクスポートの名前を変更することです。
export from" 構文では、as トークンを省略することができます。これにより、デフォルトエクスポートはデフォルトエクスポートとして再エクスポートされたままとなります。
export from は import が対応しているすべての機能に対応しています。例えばインポート属性などです。
my-module.js モジュールの中で、以下のコードを含めることができます。
HTML ページの中に含まれる最上位モジュールの中では、次のようにすることができます。
以下の点に注意することが重要です。
モジュール全体を表す単一の値をエクスポートしたい場合は、デフォルトエクスポートが使用できます。
別のスクリプトからの、デフォルトエクスポートのインポートは直観的です。
以下のような階層がある場合を例に考えてみましょう。
コードスニペットを使うとこのような感じになります。
| ECMAScript® 2027 Language Specification # sec-exports |
ブラウザー互換性一覧表を表示するには、JavaScript を有効にしてください。
より良いインターネットのための青写真。
このコンテンツの一部は、©1998–2026 個人の mozilla.org 協力者です。コンテンツはクリエイティブ・コモンズ・ライセンスのもとで利用できます。