diff --git a/docs/reference/import-export-require.md b/docs/reference/import-export-require.md index 6ee2eec4..7741dc64 100644 --- a/docs/reference/import-export-require.md +++ b/docs/reference/import-export-require.md @@ -41,7 +41,7 @@ export const bar = foo; ## モジュールは`import`時に一度だけ評価される -モジュールのコードが評価されるのは、1回目の`import`のときだけです。2回目以降の`import`では、最初に評価した内容が使われます。言い換えると、モジュールは初回`import`でキャッシュされるとも言えますし、モジュールはいわゆるシングルトン(singleton)的なものとも言えます。 +JavaScriptでは、モジュールのコードが評価されるのは、1回目の`import`のときだけです。2回目以降の`import`では、最初に評価した内容が使われます。言い換えると、モジュールは初回`import`でキャッシュされるとも言えますし、モジュールはいわゆるシングルトン(singleton)的なものとも言えます。 たとえば、`module.js`というモジュールを3回読み込んだとしても、この`module.js`が評価されるのは最初の1回目だけです。 @@ -58,6 +58,16 @@ import "./module.js"; import "./module.js"; ``` +## JavaScriptのモジュールシステム + +JavaScriptにはES Modules(ESM)という言語公式のモジュールシステムがあります。`import`構文や`export`構文を使ったものがES Modulesです。 + +ESMが登場したのが2015年ごろです。それまで、JavaScriptには公式的なモジュールシステムがありませんでした。 + +そのため、非公式のモジュールシステムがいくつか存在します。その中でも今も広く使われるのが、CommonJS(CJS)です。CommonJSは`require`関数と`exports`/`module.exports`変数を用いたものです。 + +業界としてはES Modulesに統一されるべきですが、CommonJSのライブラリ資産もまだ多く残っているため、CommonJSに触れる機会はまだまだあります。 + ## モジュールの歴史的経緯 ### かつてのJavaScript diff --git a/docs/reference/module/README.md b/docs/reference/module/README.md new file mode 100644 index 00000000..9d8edb14 --- /dev/null +++ b/docs/reference/module/README.md @@ -0,0 +1,40 @@ +--- +sidebar_label: 🚧概要 +slug: /reference/module +--- + +# モジュール (module) + +このセクションの内容 + +- モジュールの基礎 + - 2つのモジュールシステム + - TypeScriptのモジュールの基礎 + - 理解しておく必要があること +- ES Modulesの基礎 + - 歴史 + - 構文 + - スクリプトとモジュール + - 値の公開と非公開 + - モジュールは常にstrict mode + - モジュールはimport時に一度だけ評価される +- CommonJSの基礎 + - 歴史 + - 構文 +- ES Modulesの構文: importとexport + - default exportとimport + - named exportとimport + - re-export + - TypeScript固有の構文 +- CommonJSの構文: requireとexports + - module.exports + - exports + - require + - TypeScript固有の構文 +- Node.jsのモジュール解決 + - 拡張子 + - バンドラー +- TypeScript独自のモジュール解決 + - パスエイリアス`@` + - 書換えてはくれない + - 拡張子