ESModuleとCommonJS
-
CommonJs
-
Node.jsのモジュールフォーマット
-
export { method }
-
import {a} from 'module'
-
ESModule
-
ブラウザのモジュールフォーマット
-
exports.method = method
-
const a = require('module').a
-
そもそもWebブラウザ側にモジュールシステムが存在しなかった
-
ES6(ES2015)でESModule(import/export)が標準化された
-
現状
-
CommonJSとESModuleに互換性が無いが、Node.jsのnpmエコシステムが巨大過ぎてCommonJSを捨てることが出来ず、並立している
-
React
不安定な過渡期
-
Reactは早くからES6のimport/exportで構築されたが、これはトランスパイラ(Babel)とバンドラ(webpack)がESに対応し、それに依存することが出来たから
-
Reactなどの先進フロントエンドを使うには、トランスパイラとバンドラがセットのような感じになっている
-
そもそもReactはNodeに依存する必要が無いのに、ESMモジュールをリリースせず、バンドラとコンパイラで変換する前提でリリースしている