モジュールメモ
過去(といっても、2015年ごろ?)にはCommonJSやAMDなどモジュールの実装が複数あり、なおかつ公式のモジュール実装がなかったため、極めて混乱した状況になっていた。
ES2015でES modulesが策定され、公式のモジュール仕様ということもあり2021年現在ではデファクトスタンダードのポジションを確立しているようである。なので、ES modulesについてここではメモする。
nodeコマンドで実行する場合
拡張子をjsではなくmjsにする必要がある。
[TODO] なんでmjsである必要があるのか調べる
読み込まれる側
外部から参照できる関数などをexport
で宣言する必要がある。C言語などでの*.h
ファイルのイメージ。
// module.js
export function add(a, b) {
return a + b;
}
読み込む側
import
でファイルを読み込む。
// entrypoint.js
import { add } from './module.js';
console.log(add(1,1));
色々な記述方法
まとめてインポートする
import * as パッケージ名 from ファイル
を使うとモジュールでexportされている全ての関数などをパッケージ名
に紐づけて読み込むことができる。
import * as PackageName from './module.js';
PackageName.add(1,1);
別名でインポートする
import { 関数など as 別名 } from ファイル
を使うと読み込んだ関数などを別名で参照できるようになる。元の名前では参照できない。
import { add ass plus } from './module.js';
console.log(plus(1,1));
デフォルトのインポートを指定する
export default エクスポート対象
を宣言するとインポート側でimport パッケージ名 from ファイル
でインポートすることができるようになる。
// module.js
function add(a,b) { return a + b; }
function sub(a,b) { return a - b; }
export function multi(a,b) { return a * b; }
export default { add, sub };
// entrypoint.js
import pkg from './module.js'
pkg.add(1,2);
// entrypoint.js
// デフォルト以外の関数などもインポートする場合
import pkg, { multi } from './module.js'
pkg.add(1,2);
multi(1,2);