一行で理解するCJSとMJSの使い分け
node.js ではCJS(commonJS)とMJS(ES Modules)という2つの異なるモジュールシステムがあり、混同されて運用されています。
Node.jsが最初に導入したモジュールシステムであるCommonJS (CJS)では、require()関数とmodule.exportsオブジェクトを使用してモジュールのインポートとエクスポートを行う。CJSモジュールは通常.js拡張子を持ち、Node.js環境で直接使用できる。
ES6で導入された、import文とexport文でモジュールをインポート・エクスポートするモジュールシステムです。通常は.mjsという拡張子を使用し、Node.jsでは–experimental-modulesフラグを有効にする必要があります。
CJSモジュールでMJSモジュールを読み込むには、require()関数を使ってMJSモジュールをCJSモジュールに変換する必要があります。例:
const mjsModule = require('./mjsModule.mjs');
MJSモジュールにCJSモジュールを読み込むには、import()関数を用いてCJSモジュールをMJSモジュールに変換する。例:
import(cjsModule).then((cjsModule) => {
// 使用cjsModule
});
CJSとMJSのモジュールシステムにはそれぞれ文法や挙動で違いがあり、import、exportの文法やモジュールパスの解決方法などが異なるため、互換性問題に注意が必要であることに注意。
いずれにせよ、CJS モジュールシステムと MJS モジュールシステムは Node.js 上で互いに混用可能だが、それらの間の構文上の違いと行動上の違いには注意が必要である。