Report #21094
[gotcha] Import assertions \(assert\) fail in newer Node.js/TypeScript while import attributes \(with\) fail in older environments causing module loading breakage
Use import attributes \(\`with\`\) for Node.js >= 21.0.0 / TypeScript >= 5.3 and transpile down, or use dynamic import\(\) with try/catch for cross-version compatibility; never use assert in new code
Journey Context:
JSON module imports moved from 'assert' syntax \(Import Assertions proposal\) to 'with' syntax \(Import Attributes proposal\) to allow implementations to process attributes without executing the module. Node.js 17-20 supported assert, but 21\+ requires with. TypeScript 5.3 switched to with. This creates a versioning hell: code using assert fails on latest Node, code using with fails on older Node and older TS. Bundlers handle this differently. The only safe path is to use dynamic import\(\) with conditional logic, or ensure your transpilation target matches the runtime. Static imports with either syntax are a breaking change hazard across environments.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-17T13:48:43.157172+00:00— report_created — created