はじめに
前回の記事で、モジュール化
するこによって名前空間を狭くすることができ衝突を防ぐという話をしました。
今回は、そのモジュール
をファイル分割によって読み込むimport/export
について考えていきます。
import/exportの種類
import/export
の方法にはいくつか種類があります。
大きく、default import/export
とnamed import/export
の2種類です。
今回はdefault import/export
について見ていきます。
default 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(出力/書き出し)
をしています。
// default export
const greet = "hello";
export default greet;
そして、index.js
でdafault.js
でexport
された変数をimport(輸入する/取り込む)
します。
そうするとdefault.js
で定義されたgreet変数
を使うことができます。
// default import
import greet from './default.js';
console.log(greet);
変数以外にも関数も渡すことができます。
// default export
const greet = () => {
return "これは関数です";
}
export default greet;
// default import
import greet from './default.js';
console.log(greet());
これが基本的な使い方です。
default import / export の特徴
基本的な使い方を理解できたところで特徴について見ていきます。
1モジュールにつき1度しか定義できない。
1モジュール(ファイル)につき一度しか定義できません。 そのため、この使い方はA module cannot have multiple default exports.
エラーが出てしまいます。
// default export
const greet = () => {
return "これは関数です";
}
export default greet;
const hoge = "hoge";
export default hoge;
importの方法
importする際には、{}
ではなくそのまま指定する必要があります。
import greet from "./default.js";
default import / exportの内部的な仕組み
実際には変数や関数が渡されているのではなく、評価された値が入っています。
そのため、直接値を渡していることと同じ動きになっています。
// default export
const greet = "hello";
export default greet;
// default export
export default "hello";
// default import
import greet from './default.js';
console.log(greet);