Node.js ES モジュール

概要:このチュートリアルでは、`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.mjsapp.mjsの名前をそれぞれmath.jsapp.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モジュールとして扱うよう指示できます。
このチュートリアルは役に立ちましたか?