今回は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
ファイルでimport
とexport
構文を使用できる。
その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形式として扱うことができる。これにより、そのファイルではimport
とexport
構文が使用できる。
【参考】