logo
/
ESModuleとCommonJS
2022-01-01
  • 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モジュールをリリースせず、バンドラとコンパイラで変換する前提でリリースしている