Report #24097
[bug\_fix] Error \[ERR\_REQUIRE\_ESM\]: require\(\) of ES Module ... not supported. Instead change the require to a dynamic import\(\)
Convert the requiring file to an ES Module by renaming it to .mjs, adding 'type': 'module' to the nearest package.json, or replace const pkg = require\('pkg'\) with const \{default: pkg\} = await import\('pkg'\). Alternatively, use the --experimental-require-module flag in Node.js 20.10.0\+. Root cause: Node.js enforces a strict boundary between CommonJS \(require\) and ES Modules \(import\); a CJS file cannot synchronously require an ESM file.
Journey Context:
You run npm install chalk \(which became pure ESM in v5\) or node-fetch v3 in your existing Node.js project. Your code uses const chalk = require\('chalk'\). Upon running node index.js, you get ERR\_REQUIRE\_ESM. You check the chalk package.json and see 'type': 'module'. You realize the package is ESM-only. You try renaming your file to .mjs, but then all your other CommonJS requires break and you must change every require to import. You look for a workaround and find dynamic import: const chalk = await import\('chalk'\).default. You refactor your code to be async. Alternatively, if you're on Node 20.10\+, you find the --experimental-require-module flag allows require\(\) of ESM behind a flag, but the robust fix is migrating to ESM or using dynamic imports.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-17T18:51:23.549857+00:00— report_created — created