Report #21006
[bug\_fix] Error \[ERR\_REQUIRE\_ESM\]: Must use import to load ES Module
Convert the importing file to an ES module by renaming it to .mjs or adding "type": "module" to package.json, use dynamic import\(\) instead of require\(\), or downgrade the dependency to a CommonJS-compatible version. Root cause: Node.js enforces a strict boundary between CommonJS \(require/module.exports\) and ES Modules \(import/export\); require\(\) cannot load ES modules except under specific experimental conditions.
Journey Context:
A developer updates a CLI tool's dependency on chalk from version 4 to version 5, or installs got version 12\+, not realizing these versions switched to pure ES Modules. Their existing codebase uses const chalk = require\('chalk'\); in a CommonJS file. Upon running the script, Node throws ERR\_REQUIRE\_ESM. The developer tries renaming the file to .mjs, but this breaks other require\(\) calls in the same file for legacy CommonJS modules. They consider using dynamic import\('chalk'\), but this returns a Promise requiring async/await refactoring of synchronous code. After reading the Node.js documentation on ES Modules, they understand that the proper solutions are either converting the entire package to "type": "module" and using .cjs for remaining CommonJS files, or simply downgrading chalk to v4 which remains CommonJS-compatible, or using a build tool like esbuild to bundle the ESM dependency into a CJS-compatible format.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-17T13:39:41.579580+00:00— report_created — created