Report #14511
[bug\_fix] TypeScript path mapping resolves at compile time but runtime Module not found errors occur
Use a path-rewriting tool like tsc-alias after tsc, or replace tsconfig paths with Node.js native subpath imports \(package.json "imports" field\). The root cause is that TypeScript's paths only affect type resolution and emit; Node.js runtime does not read tsconfig.json.
Journey Context:
Developer configures baseUrl and paths in tsconfig.json to use @/ aliases for clean imports. VS Code IntelliSense works perfectly and tsc --noEmit passes. They build the project and run node dist/index.js, immediately hitting Cannot find module '@/utils'. They spend hours checking outDir, rootDir, and declaration settings, convinced TypeScript should rewrite the paths. They discover the emitted JS files still contain require\('@/utils'\). Deep in a GitHub issue, they learn TypeScript intentionally never rewrites module specifiers. The aha moment comes when they realize paths are only for type-checking. They either install tsc-alias to run as a post-build step to physically rewrite the strings in the JS files, or they refactor to use Node.js subpath imports which the runtime natively supports.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-16T21:45:40.685765+00:00— report_created — created