概要
-
ESModules
は、ECMAScript
の仕様の一部。 -
CommonJS
の一部の仕様として、Modules
がある。 -
ESModules
とCommonJS
は、文脈的にJavascript・TypeScriptで、別のモジュールを読み込むため仕組みを指すことが多い。 -
ESModule
とCommonJS
は、競合する関係。(正確には、ECMAScript
とCommonJS
は競合する関係)- ESModules
-
CommonJS
の上位互換。 -
ESModule
からCommonJS
のモジュールを読み込むことが可能。
-
- CommonJS
-
Node.js
でデフォルトで採用されてきたが、最近はESModules
に変わりつつある。
-
- ESModules
実装上の違い
- ESModules
- モジュール側
modules.mjs
const getName = () => { return 'hoge'; }; const getAge = () => { return 18; }; export { getName, getAge, };
- モジュールを呼ぶ側
index.mjs
import { getAge } from './modules.mjs'; console.log(getAge());
- モジュール側
- CommonJS
- モジュール側
modules.js
module.exports = { getName: function() { return 'hoge'; }, getAge: function() { return 18; }, }
- モジュールを呼ぶ側
index.js
const { getAge } = require('./modules.js'); console.log(getAge());
- モジュール側
結論
-
ESModules
とCommonJS
はモジュールの仕様。 - これからは、
ESModules
が主流になる。 - とは言え、まだ
CommonJS
を使うことは多い。
ちなみに
- ESModulesをブラウザで実行するには、
type="module"
の指定が必要。index.html<script type="module" src="./index.js">