Module Traps
CommonJS
exports = xbreaks — must usemodule.exports = x(exports is just reference)require()cached — same object returned, mutations visible everywhere- Circular deps return incomplete export — whatever was assigned at require time
ESM
- No
__dirname— usefileURLToPath(import.meta.url)+dirname() - Can't
require()ESM from CJS — must use dynamicimport()which returns Promise importis hoisted — runs before other code, can't conditionally import
Interop
- ESM importing CJS — only default import works, no named exports
"type": "module"affects all.js— use.cjsextension for CommonJS files