- CommonJS (Node.js truyền thống):
require()/module.exports, nạp đồng bộ lúc runtime, và động (có thểrequiretrongif). Cấu trúc module không phân tích tĩnh được hoàn toàn. - ES Modules (chuẩn ngôn ngữ):
import/export, cấu trúc tĩnh — phân tích được lúc build nên hỗ trợ tree-shaking; nạp bất đồng bộ, có top-levelawaitvàimport()động. Dùng live binding (import phản ánh giá trị hiện tại của export).
Khác nữa: ESM luôn chạy strict mode, và this ở top-level là undefined (CJS là module.exports).
Node hỗ trợ cả hai (.mjs hoặc "type": "module"); trình duyệt chỉ hiểu ESM qua <script type="module">.