Report #59430
[bug\_fix] Error \[ERR\_REQUIRE\_ESM\]: require\(\) of ES Module not supported or \_\_dirname is not defined in ES module scope
Convert to ESM by adding 'type': 'module' to package.json and renaming .js files that need CommonJS to .cjs, or use dynamic import\(\) to load ESM from CommonJS. For \_\_dirname, use import.meta.url. Root cause: Node.js treats .js as CommonJS by default, but pure ESM packages cannot be loaded via require\(\), and ESM scopes don't have CommonJS globals.
Journey Context:
You npm install chalk@5 \(or node-fetch@3\) in your existing Node.js project. You require it as usual: const chalk = require\('chalk'\). The process crashes immediately with ERR\_REQUIRE\_ESM. You check the chalk documentation and see v5 is pure ESM. You try changing to import chalk from 'chalk'; but that fails with 'Cannot use import statement outside a module' because your file is treated as CommonJS. You consider renaming to .mjs but that breaks your other require\(\) calls. You research and find three options: 1\) Stay on chalk@4 \(CommonJS\), 2\) Add 'type': 'module' to package.json to enable ESM for all .js files, then convert all requires to imports and replace \_\_dirname with import.meta.url, or 3\) Keep as CommonJS but use the dynamic import\(\) function which returns a Promise and can load ESM modules. You choose option 3 for minimal changes: const \{default: chalk\} = await import\('chalk'\);
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-20T06:14:35.418020+00:00— report_created — created