できない.dev

ECMAScript Modules

別名: ESM / ES Modules / ESモジュール

JavaScript の標準モジュール方式。import / export で依存を静的に宣言し、ブラウザと Node.js の両方で動く。CommonJS の require とは解決規則も実行タイミングも異なる。

#esm#commonjs#javascript#module#nodejs

定義

ECMAScript Modules(ESM) は ECMAScript 仕様で標準化された JavaScript のモジュールシステム。import / export 構文で依存関係を静的に宣言し、モダンブラウザと Node.js のどちらでも動作する。
Node.js 従来の CommonJS(require / module.exports)とは別系統。

詳細

ESM はファイルを「モジュール」として扱い、トップレベルの import を解決してから本体を実行する。
Node.js では package.json"type": "module" か拡張子 .mjs で ESM 扱いになる。
相対 import は拡張子まで明示が必要で、トップレベル await が使える。
多くのライブラリがメジャー更新で ESM 専用へ移行している。

よくある誤解

  • CommonJS と自由に混ぜられる: 混ざらない。
    ESM から CommonJS は import できるが、CommonJS から ESM は require() できず ERR_REQUIRE_ESM になる(動的 import() だけが橋渡し)。
  • 拡張子は省略できる: ESM では相対 import の拡張子省略は不可。

関連

モジュールが見つからない失敗は Cannot find module として表面化する。
対になる方式が CommonJS で、型解決側は TypeScript の moduleResolution が担う。