要約: このチュートリアルでは、別のモジュールから変数、関数、クラスを読み込むためのJavaScriptのimportキーワードの使い方について学習します。
JavaScriptのimportキーワードの紹介
ES6モジュールを使用すると、JavaScriptコードをモジュールに分割し、さまざまなモジュール間で値(変数、関数、クラスなど)を共有できます。
モジュールから値を読み込むには、import
キーワードを使用します。また、JavaScriptソースファイルをモジュールとして読み込む必要があります。HTMLでは、scriptタグにtype="module"
を指定して読み込みます。
<script type="module" src="app.js"></script>
Code language: JavaScript (javascript)
以下に簡単な例を記載します。import
キーワードの使い方を示します。
以下のような構造を持つプロジェクトがあるとします。
├── index.html
└── js
├── app.js
└── greeting.js
Code language: JavaScript (javascript)
このプロジェクトでは、index.html
がapp.js
をモジュールとして読み込みます。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>JavaScript import</title>
</head>
<body>
<script src="js/app.js" type="module"></script>
</body>
</html>
Code language: JavaScript (javascript)
greeting.js
モジュールには、メッセージを表示するsayHi()
関数があります。sayHi()
関数は、デフォルトのエクスポートとしてエクスポートします。
export default function sayHi() {
alert('Hi');
}
Code language: JavaScript (javascript)
app.js
はgreeting.js
モジュールからsayHi()
メソッドを読み込み、実行します。
デフォルトのエクスポートの読み込み
モジュールがデフォルトのエクスポートを使用する場合、次の構文を使用してそのモジュールからデフォルトのエクスポートを読み込むことができます。
import name from 'module.js';
Code language: JavaScript (javascript)
たとえば、app.js
モジュールにgreeting.js
モジュールからsayHi()
関数を読み込むには、以下のようにします。
import sayHi from './greeting.js';
sayHi();
Code language: JavaScript (javascript)
index.html
をWebブラウザで開くと、アラートメッセージが表示されます。
sayHi()
関数はデフォルトのエクスポートなので、読み込むときに任意の名前を割り当てることができます。
たとえば、greeting.js
モジュールからsayHi
関数を読み込み、名前をdisplayGreeting()
に設定するには、以下のようにします。
import displayGreeting from './greeting.js';
displayGreeting();
Code language: JavaScript (javascript)
名前付きエクスポートの読み込み
デフォルトのエクスポートの読み込みとは異なり、名前付きエクスポートを読み込むときは、モジュールに読み込むときに名前付きエクスポートの正確な名前を指定する必要があります。さらに、名前付きエクスポートは中括弧で囲む必要があります。
以下に、名前付きエクスポートを読み込むための構文を示します。
import { namedExport1, namedExport2} from 'module.js';
Code language: JavaScript (javascript)
たとえば、2つの名前付きエクスポートを含むgreeting.js
モジュールを変更できます。
export function sayHi() {
alert('Hi');
}
export function sayBye() {
alert('Bye');
}
Code language: JavaScript (javascript)
app.js
モジュールにsayHi()
関数とsayBye()
関数をインポートするには、次のコードを使用します。
import { sayHi, sayBye } from './greeting.js';
Code language: JavaScript (javascript)
これらの関数も呼び出すことができます。
import { sayHi, sayBye } from './greeting.js';
sayHi();
sayBye();
Code language: JavaScript (javascript)
index.html
をWebブラウザで開くと、この2つの関数によって作成された2つのアラートが表示されます。
名前空間のインポート
モジュールの名前空間オブジェクトは、モジュールからのすべてのエクスポートを含む静的なオブジェクトです。モジュールを評価するときにJavaScriptによって作成される静的なオブジェクトです。
モジュール名前空間オブジェクトにアクセスするには、次の構文を使用します。
import * as name from 'module.js';
Code language: JavaScript (javascript)
この構文では、name
はmodule.js
モジュールのすべてのエクスポートをプロパティとして含むモジュール名前空間オブジェクトです。
たとえば、modules.js
にmyVariable
、myFunction
、myClass
という名前付きエクスポートがある場合、name
オブジェクトを使用して次のようにアクセスできます。
name.myVariable
name.myFunction
name.myClass
Code language: JavaScript (javascript)
名前空間のインポートの仕組みを説明するために、app.js
を変更して次のように名前空間のインポートを使用できます。
import * as greeting from './greeting.js';
greeting.sayHi();
greeting.sayBye();
Code language: JavaScript (javascript)
以下は、greeting
をモジュール名前空間オブジェクトとして指定します。
import * as greeting from './greeting.js';
Code language: JavaScript (javascript)
モジュール名前空間オブジェクトを取得したら、sayHi()
関数とsayBye()
関数を呼び出すことができます。
greeting.sayHi();
greeting.sayBye();
Code language: JavaScript (javascript)
インポートするモジュールにデフォルトのエクスポートがある場合、default
キーワードを使用してアクセスできます。
name.default
Code language: JavaScript (javascript)
例えば、greeting.js
モジュールでsayHi
関数をデフォルトのエクスポートに変更できます
export default function sayHi() {
alert('Hi');
}
export function sayBye() {
alert('Bye');
}
Code language: JavaScript (javascript)
そしてgreeting.js
モジュールからエクスポートを名前空間インポートを使用してapp.js
モジュールにインポートします
import * as greeting from './greeting.js';
greeting.default(); // sayHi()
greeting.sayBye();
Code language: JavaScript (javascript)
この場合、上で示されたようにdefault()
経由でsayHi()
関数を呼び出すことができます。次のように名前を使用してsayHi()
関数にアクセスすることはできないことに注意してください
greeting.sayHi();
Code language: JavaScript (javascript)
そうすると、次のエラーが発生します
Uncaught TypeError: greeting.sayHi is not a function
Code language: JavaScript (javascript)
名前付きエクスポート名を変更する
名前付きエクスポートをインポートする場合は、新しい名前を割り当てることができます。さまざまなモジュールから同じ名前の関数をインポートする場合に役立ちます
import { name as name1 } from "module1.js";
import { name as name2 } from "module2.js";
Code language: JavaScript (javascript)
たとえば、次の例では、app.js
モジュールにインポートするときに、sayHi()
関数とsayBye()
関数をhi()
関数とbye()
関数に名前変更する方法を示しています
import { sayHi as hi, sayBye as bye } from './greeting.js';
hi();
bye();
Code language: JavaScript (javascript)
まとめ
- モジュールに変数、関数、およびクラスをインポートするには、JavaScriptの
import
キーワードを使用します