概要:このチュートリアルでは、`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.mjsCode 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.jsCode 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=moduleCode language: JavaScript (javascript)まとめ
.mjs拡張子のJavaScriptファイルを使用すると、Node.jsにJavaScriptファイルをESモジュールとして扱うよう指示できます。package.jsonファイルに"type": "module"フィールドを設定することでも、Node.jsにJavaScriptファイルをESモジュールとして扱うよう指示できます。