Report #104606
[bug\_fix] TypeError: Cannot read properties of null \(reading 'map'\) in Node.js module \(CommonJS vs ESM graph\)
Ensure that all \`require\(\)\` calls are replaced with \`import\` or use a dynamic \`import\(\)\` if the module is ESM. If importing a JSON file, use \`import\` with \`assert \{ type: 'json' \}\` or read it via \`fs\`.
Journey Context:
I had a Node.js 16 backend service that loaded a configuration JSON file via \`const config = require\('./config.json'\)\`. After upgrading to Node 18, the code suddenly threw 'Cannot read properties of null' on a \`.map\(\)\` call on a nested object. It turned out that the JSON file was being loaded as an ES module because a parent directory had \`"type": "module"\` in its package.json. \`require\(\)\` could not parse the JSON as CommonJS, returning \`null\` instead. I spent hours inspecting the JSON structure, thinking it was malformed. The fix was to either change the file extension to \`.cjs\` or use \`import config from './config.json' assert \{ type: 'json' \}\`. The root cause is that Node.js enforces strict module resolution: when a package.json has \`"type": "module"\`, all \`.js\` and \`.json\` files are treated as ESM, and \`require\(\)\` fails silently or returns null for ESM exports.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-09-13T20:04:56.702120+00:00— report_created — created