ESMを使う(Node.js)

今回はNode.jsでESM (ECMAScript Modules)を使う方法をまとめます。

  • Node.js v14以降であれば、ESモジュールを使うためのサポートが組み込まれている。
その1. package.json"type": "module"を指定

package.json

{
  "name": "my-esm-project",
  "version": "1.0.0",
  "type": "module"
}

utils.js

export function greet(name) {
  return `Hello, ${name}!`;
}

main.js

import { greet } from './utils.js';

console.log(greet('World'));
$ node main.js
Hello, World!
  • プロジェクトのメタデータと依存関係をpackage.jsonに記述。開発に必要なモジュールやスクリプトもここに記述。
  • "type": "module":Node.jsがESM (ECMAScript Modules) 形式をデフォルトで使用するように指定する。
    • Node.jsは長らくCommonJS形式をモジュールシステムとして利用していたが、最近ではJavaScriptがネイティブにサポートするESM形式を利用することが増えている。
    • 後方互換性を維持するために、既存のコードが依然としてCommonJS形式を使用できるようにする。"type": "module"package.jsonに記述することで、モジュールをESM形式として解釈。これにより、.jsファイルでimportexport構文を使用できる。
その2. モジュールファイル.mjsの拡張子にする(業務でも使うらしい)

main.mjs

import fs from 'fs';

fs.readFile('./package.json', 'utf-8', (err, data) => {
  if (err) throw err;
  console.log(data);
});
  • Node.jsの組み込みモジュールであるfsをインポートし、package.jsonファイルを読み込んでその内容をコンソールに出力。以下で実行。
$ node main.mjs
  • "type": "module"package.jsonに指定されていない場合や、一部のファイルだけをESM形式として扱いたい場合などに、ファイルの拡張子を.mjsにすることでそのファイルをESM形式として扱うことができる。これにより、そのファイルではimportexport構文が使用できる。

【参考】