概要:このチュートリアルでは、`import`文と`export`文を使用してNode.jsでESモジュールを使用する方法を学びます。
Node.jsにJavaScriptファイルをESモジュールとして扱うよう指示する方法
Node.jsは2種類のモジュールをサポートしています
- CommonJS
- ESモジュール(ESM)(Node 14.0.0以降でサポートされています)。
デフォルトでは、Node.jsはJavaScriptファイルをCommonJSモジュールとして扱います。ただし、次のいずれかの方法を使用して、Node.jsにJavaScriptファイルをESモジュールとして扱うよう指示できます。
.mjs
で終わるJavaScriptファイル.js
で終わるJavaScriptファイルであり、最も近い親ディレクトリのpackage.json
ファイルに、トップレベルフィールド"type"
が値"module"
で含まれている場合。- 引数
--eval
を渡すか、フラグ--input-type=module
を使用してnodeコマンドにSTDIN経由で渡します。この方法は実際にはほとんど使用されませんが、利用可能です。
.mjs
ファイルによるNode.js ESモジュール
まず、math.mjs
という新しいファイルを作成し、次のコードを追加します。
function add(a, b) {
return a + b;
}
function subtract(a, b) {
return a - b;
}
export { add, subtract };
Code language: JavaScript (javascript)
math
モジュール内
- 最初に、
add
関数とsubtract
関数を定義します。 - 次に、
export
文を使用してadd
関数とsubtract
関数をエクスポートします。これは名前付きエクスポートです。
あるいは、このように`export`キーワードを`function`の前に配置することもできます。
export function add(a, b) {
return a + b;
}
export function subtract(a, b) {
return a - b;
}
Code language: JavaScript (javascript)
次に、math
モジュールを使用するapp.mjs
という新しいファイルを作成します。
import { add, subtract } from './math.mjs';
let a = 20,
b = 5;
let result = add(a, b);
console.log(`${a} + ${b} = ${result}`);
result = subtract(a, b);
console.log(`${a} - ${b} = ${result}`);
Code language: JavaScript (javascript)
app.mjs
ファイル内
- 最初に、
import
文を使用してmath
モジュールからadd
関数とsubtract
関数をインポートします。 - 次に、
add
関数とsubtract
関数を呼び出します。
最後に、node
コマンドを使用してapp.mjs
ファイルを実行します。
node app.mjs
Code language: CSS (css)
コンソールに次の表示が表示されるはずです。
20 + 5 = 25
20 - 5 = 15
この例では、.mjs
で終わるファイルを使用していますが、Node.jsはそれらをすべてESモジュールとして扱います。
package.json
ファイルでtypeモジュールを設定する
まず、math.mjs
とapp.mjs
の名前をそれぞれmath.js
とapp.js
に変更します。
次に、トップレベルフィールドtype
が値"module"
を持つpackage.json
ファイルを作成します。
{
"type": "module"
}
Code language: JSON / JSON with Comments (json)
最後に、node
コマンドを使用してapp.js
ファイルを実行します。
node app.js
Code language: CSS (css)
最初の例と同じ出力が表示されるはずです。
eval
コマンドライン引数の使用
次の例では、eval
引数と--input-type=module
を使用してnode
コマンドを実行します。
node --input-type=module --eval "import { delimiter } from 'path'; console.log(delimiter);"
Code language: JavaScript (javascript)
出力
;
この例では、次のコードを--eval
引数に渡します。
import { delimiter } from 'path';console.log(delimiter);
Code language: JavaScript (javascript)
これは、path
モジュールから区切り記号をインポートし、それをコンソールに出力します。
同様に、次のコマンドを使用できます。
echo "import { delimiter } from 'path'; console.log(delimiter);" | node --input-type=module
Code language: JavaScript (javascript)
まとめ
.mjs
拡張子のJavaScriptファイルを使用すると、Node.jsにJavaScriptファイルをESモジュールとして扱うよう指示できます。package.json
ファイルに"type": "module"
フィールドを設定することでも、Node.jsにJavaScriptファイルをESモジュールとして扱うよう指示できます。