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 が担う。