はじめに
前回の記事で、モジュール化
するこによって名前空間を狭くすることができ衝突を防ぐという話をしました。
今回は、そのモジュール
をファイル分割によって読み込むimport/export
について考えていきます。
import/exportの種類
import/export
の方法にはいくつか種類があります。
大きく、default import/export
とnamed import/export
の2種類です。
今回はnamed import/export
について見ていきます。
named import / export
まず、事前準備としてscriptタグ
にtype="module"
を設定して、モジュールとして扱えるように設定します。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>app</title>
</head>
<body>
<script src="index.js" type="module"></script>
</body>
</html>
次に同じ階層にindex.js
とdefault.js
を作成します。default.js
にまずexport
できるようにコードを書いていきます。
greet変数
を定義して、それを別ファイルで使えるようにexport(出力/書き出し)
をしています。
// named export
const greet = "hello";
export { greet };
そして、index.js
でdafault.js
でexport
された変数をimport(輸入する/取り込む)
します。
そうするとdefault.js
で定義されたgreet変数
を使うことができます。
// named import
import { greet } from './default.js';
console.log(greet);
変数以外にも関数も渡すことができます。
// named export
const greet = () => {
return "これは関数です";
}
export { greet };
// named import
import { greet } from './default.js';
console.log(greet());
named import / exportの特徴
複数まとめてimport
export
時に複数まとめて渡すことができます。
// named export
const greet = "hello";
const hoge = "hoge";
export { greet, hoge };
// named import
import { greet, hoge } from './default.js';
console.log(greet, hoge);
宣言と同時にexport
宣言と同時にexport
することもできます。
import
時には変わらずまとめて受け取ることができます。
// named export
export const greet = "hello";
const hoge = "hoge";
export { hoge };
// named import
import { greet, hoge } from './default.js';
console.log(greet, hoge);
// named export
export const greet = () => {
return "これは関数です";
}
// named import
import { greet } from './default.js';
console.log(greet());
エイリアスの設定
as
を指定して別名を設定することができます。
// named export
const greet = "hello"
export { greet as hello };
// named import
import { hello } from './default.js';
console.log(hello);
export/import両方でエイリアスの設定
export
時にas
で別名を指定し、さらにimport
時にもas
で別名を指定することができます。
// named export
const greet = "hello"
export { greet as hello };
// named import
import { hello as h } from './default.js';
console.log(h);