はじめに
JavaScriptのモジュールについて概要をまとめました。
モジュール
- 初期のJavaScriptスクリプトは規模の小さなものが多かったが、現在では規模の大きなスクリプトが用いられている
- そのため、スクリプトを分割して必要な時にインポートできるような仕組みが必要となった
- こうしてできたスクリプトのひとまとまりをモジュールと呼ぶ
- 実体は、JavaScriptで書かれたファイルである
インポート
- モジュールを使用するには、
import
文を使う- ここで、
name
、draw
、area
は、モジュールsquare.js
の中で定義されている機能の名前である。具体的には、関数、var
、let
、const
又はクラスのいずれかである -
from
以降の文字列は、モジュールのファイルパスである。この場合は相対パスで記述されており、このimport
文が記述されたスクリプトのあるディレクトリ内にあるmodules
というディレクトリの中にsquare.js
というモジュールが配置されている
- ここで、
import文の例
import {name, draw, area} from "./modules/square.js";
-
as
を用いて別名を付けることもできる- この例では、
square.js
モジュールのname
という機能を、squareName
という名前で用いることができる。また、circle.js
モジュールのname
という機能をcircleName
という名前で用いることができる - この例のように、複数のモジュールで同じ名前の機能が定義されている場合は、それらに別名をつけて判別する
- この例では、
asを用いた例
import {name as squareName, draw, area} from "./modules/square.js";
import {name as circleName, draw, area} from "./modules/circle.js";
- モジュールオブジェクト
- この例では、
module.js
の中にある全てのエクスポートされた機能を取得して、Module
というオブジェクトのメンバーとして利用できるようにしている - 独自の名前空間を持たせるような効果があるため、多くのモジュールを
import
するような場合に名前の衝突を防ぐのに有効
- この例では、
モジュール内の機能をモジュールオブジェクトにインポートする例
import * as Module from "./modules/module.js";
Module.function1();
Module.function2();
- インポートされた機能はインポートしたスクリプトの内部からしかアクセスできない
- importとrequireの違い
次のリンク先を参照
https://qiita.com/minato-naka/items/39ecc285d1e37226a283
エクスポート
- モジュールが持つ機能を外部に提供するためには、
export
文を用いる- この例では、
name
及びdraw()
がエクスポートされる - エクスポートできるものは、関数、
var
、let
、const
又はクラスのいずれかである。例えば、関数内でexport
を使うことはできない
- この例では、
export文の例(MDNからそのまま引用)
export const name = "square";
export function draw(ctx, length, x, y, color) {
ctx.fillStyle = color;
ctx.fillRect(x, y, length, length);
return { length, x, y, color };
}
- より便利なエクスポートの方法として、モジュールファイルの末尾に単一の
export
文を置き、その後にエクスポートしたい機能のカンマ区切りリストを中括弧でかこむ方法がある
export文の別の例
export { name, draw, area };
-
export
文においても、import
文と同様な方法で別名をつけることができる
モジュールの集約
- 依存性の階層が複数になった場合などに、いくつかあるサブモジュールをひとつの親モジュールにまとめて管理を単純化することができる
親モジュール(XYZ.jsとする。)におけるサブモジュールの集約部分の例
export { x } from "./modules/x.js"
export { y } from "./modules/y.js"
export { z } from "./modules/z.js"
親モジュール(XYZ.js)を利用するスクリプトにおけるインポート部分の例
import {x, y, z} from "./modules/XYZ.js";
HTMLへの適用
- HTMLページにモジュールを適用するには、
<script>
要素に属性type="module"
を含める
例
<script type="module" src="module.js"></script>