Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

WIP: Modules #515

Open
wants to merge 3 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 11 additions & 1 deletion docs/reference/import-export-require.md
Original file line number Diff line number Diff line change
Expand Up @@ -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回目だけです。

Expand All @@ -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
Expand Down
40 changes: 40 additions & 0 deletions docs/reference/module/README.md
Original file line number Diff line number Diff line change
@@ -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独自のモジュール解決
- パスエイリアス`@`
- 書換えてはくれない
- 拡張子