ファイルを更新する
This commit is contained in:
parent
915d909a07
commit
183eb20fd9
170
docs/module.md
Normal file
170
docs/module.md
Normal file
@ -0,0 +1,170 @@
|
|||||||
|
- [\[Javascript\]モジュールについて](#javascriptモジュールについて)
|
||||||
|
- [モジュールについて](#モジュールについて)
|
||||||
|
- [ESモジュール(ESM)](#esモジュールesm)
|
||||||
|
- [使い方](#使い方)
|
||||||
|
- [設定方法](#設定方法)
|
||||||
|
- [Node.jsでESMを使うには?](#nodejsでesmを使うには)
|
||||||
|
- [`.mjs`拡張子を使う方法](#mjs拡張子を使う方法)
|
||||||
|
- [ブラウザでESモジュールを使う方法\*\*](#ブラウザでesモジュールを使う方法)
|
||||||
|
- [CommonJS(CJS)](#commonjscjs)
|
||||||
|
- [**使い方**](#使い方-1)
|
||||||
|
|
||||||
|
# [Javascript]モジュールについて
|
||||||
|
## モジュールについて
|
||||||
|
|
||||||
|
JavaScriptには大きく2つのモジュールシステムがあります。
|
||||||
|
|
||||||
|
* CommonJS(CJS):従来のNode.jsで使われていた
|
||||||
|
* ESモジュール(ESM) :ES6(2015年)で導入され、ブラウザ・Node.js両方で使える
|
||||||
|
|
||||||
|
| 特徴 | CommonJS (CJS) | ESモジュール (ESM) |
|
||||||
|
| ---------------------- | -------------------- | ---------------------- |
|
||||||
|
| 使用環境 | Node.js | ブラウザ&Node.js |
|
||||||
|
| インポート | `require()` | `import` |
|
||||||
|
| エクスポート | `module.exports` | `export` |
|
||||||
|
| 読み込み | 同期的(ブロッキング) | 非同期(遅延ロード可能) |
|
||||||
|
| ブラウザ対応 | そのままでは動かない | `type="module"` で動く |
|
||||||
|
| ツリーシェイキング[^1] | 不可 | 可能 |
|
||||||
|
|
||||||
|
[^1]:未使用コード削除
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### ESモジュール(ESM)
|
||||||
|
|
||||||
|
ESM(ECMAScript Modules)はES6(2015年)で登場し、
|
||||||
|
ブラウザとNode.js両方で使えるモジュールシステムです
|
||||||
|
|
||||||
|
* `import` / `export` を使う
|
||||||
|
* 非同期で読み込む(遅延ロードが可能)
|
||||||
|
* ブラウザとNode.jsの両方で使える
|
||||||
|
* `type="module"` をHTMLで指定するとブラウザで動く
|
||||||
|
* CommonJSとの互換性が低い(`require()`とは併用できない)
|
||||||
|
|
||||||
|
#### 使い方
|
||||||
|
|
||||||
|
ESモジュールでは デフォルトエクスポート(export default)と
|
||||||
|
名前付きエクスポート(export{})の2種類があります。
|
||||||
|
|
||||||
|
**export(エクスポート)**
|
||||||
|
|
||||||
|
```js
|
||||||
|
// utils.js (ESM)
|
||||||
|
export function greet(name) {
|
||||||
|
return `Hello, ${name}!`;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
**import(インポート)**
|
||||||
|
|
||||||
|
```js
|
||||||
|
// main.js
|
||||||
|
import { greet } from "./utils.js";
|
||||||
|
console.log(greet("Alice")); // "Hello, Alice!"
|
||||||
|
```
|
||||||
|
#### 設定方法
|
||||||
|
|
||||||
|
1. **Node.jsでESMを使うには?**
|
||||||
|
- `package.json` に `"type": "module"` を追加
|
||||||
|
- `.mjs` 拡張子を使う
|
||||||
|
2. **ブラウザでは `type="module"` を指定**
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
##### Node.jsでESMを使うには?
|
||||||
|
|
||||||
|
Node.jsはデフォルトではCommonJSですが
|
||||||
|
以下の方法でESMを有効にできます。
|
||||||
|
|
||||||
|
`package.json` に `"type": "module"` を追加する
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"type": "module"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
この設定をすると`import` / `export` が使えるようになる。
|
||||||
|
|
||||||
|
##### `.mjs`拡張子を使う方法
|
||||||
|
|
||||||
|
`package.json`を変更せずに、拡張子を`.mjs` にすることでESMとして扱われる
|
||||||
|
|
||||||
|
```js
|
||||||
|
// utils.mjs
|
||||||
|
export function greet(name) {
|
||||||
|
return `Hello, ${name}!`;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
```js
|
||||||
|
// main.mjs
|
||||||
|
import { greet } from "./utils.mjs";
|
||||||
|
console.log(greet("Alice"));
|
||||||
|
```
|
||||||
|
|
||||||
|
##### ブラウザでESモジュールを使う方法**
|
||||||
|
|
||||||
|
ブラウザで使う場合は
|
||||||
|
HTMLで `type="module"` を指定する。
|
||||||
|
|
||||||
|
```html
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="ja">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<title>ES Modules</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<script type="module">
|
||||||
|
import { greet } from "./utils.js";
|
||||||
|
console.log(greet("Alice"));
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
```
|
||||||
|
|
||||||
|
----
|
||||||
|
|
||||||
|
|
||||||
|
### CommonJS(CJS)
|
||||||
|
|
||||||
|
* `require()`と`module.exports`を使う
|
||||||
|
* ブラウザでは直接使えない(WebpackやBabelなどが必要)
|
||||||
|
* 同期的にモジュールを読み込む(ブロッキング)
|
||||||
|
* モジュールが読み込まれるまで次のコードが実行されない
|
||||||
|
* 大量モジュールを読み込む場合、全体の処理時間が長くなる可能性がある。
|
||||||
|
* Node.jsの初期から採用されていたモジュールシステム
|
||||||
|
* 最近ではESモジュール(ESM)の採用が増えています
|
||||||
|
* ブラウザとの互換性や非同期的なモジュール読み込みによるパフォーマンス向上
|
||||||
|
|
||||||
|
#### **使い方**
|
||||||
|
|
||||||
|
export(モジュールのエクスポート)
|
||||||
|
|
||||||
|
```js
|
||||||
|
// utils.js
|
||||||
|
function greet(name) {
|
||||||
|
return `Hello, ${name}!`;
|
||||||
|
}
|
||||||
|
module.exports = greet; // エクスポート
|
||||||
|
```
|
||||||
|
|
||||||
|
または以下のように記載
|
||||||
|
|
||||||
|
```js
|
||||||
|
// utils.js (CommonJS)
|
||||||
|
module.exports = {
|
||||||
|
greet: function(name) {
|
||||||
|
return `Hello, ${name}!`;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
import(モジュールのインポート)
|
||||||
|
|
||||||
|
```js
|
||||||
|
const greet = require("./utils.js"); // インポート
|
||||||
|
console.log(greet("Alice")); // "Hello, Alice!"
|
||||||
|
```
|
12
docs/node-package.md
Normal file
12
docs/node-package.md
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
|
||||||
|
|
||||||
|
## package.jsonについて書き方
|
||||||
|
|
||||||
|
- **main**
|
||||||
|
|
||||||
|
npmパッケージを作成する場合、
|
||||||
|
他の人が`require()`したときに最初に読み込まれるファイルを指定できます。
|
||||||
|
|
||||||
|
ESモジュール(ESM)の時にも
|
||||||
|
エントリーポイントになります
|
||||||
|
|
14
package.json
Normal file
14
package.json
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
{
|
||||||
|
"name": "js-common-code",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"description": "Javascriptで活用できるコードを開発する。 Node.jsによりサーバーサイドも作成する",
|
||||||
|
"main": "src/server/hellp.js",
|
||||||
|
"directories": {
|
||||||
|
"doc": "docs"
|
||||||
|
},
|
||||||
|
"scripts": {
|
||||||
|
"test": "echo \"Error: no test specified\" && exit 1"
|
||||||
|
},
|
||||||
|
"author": "",
|
||||||
|
"license": "ISC"
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user