TypeScript搭配Express.js配置路径别名后导入模块找不到报错
核心原因
你在tsconfig.json中配置的paths仅作用于TypeScript的编译期类型检查与路径解析,Node.js原生运行时(包括ts-node/ts-node-dev的默认运行逻辑)不识别该别名配置,因此会抛出模块找不到的错误。
需要补充的配置
1. 必须配置baseUrl参数
paths配置需要和compilerOptions下的baseUrl配合生效,请先确认你的tsconfig.json的compilerOptions中已添加正确的baseUrl配置,示例:
{ "compilerOptions": { "baseUrl": "./", // 路径对应tsconfig.json所在的项目根目录 "paths": { "@/lib/*" : ["src/lib/*"], "@/routes/*": ["src/routes/*"], "*": ["node_modules/*"] } } }
如果你的baseUrl配置为./src,则paths对应的路径需要改为"@/lib/*" : ["lib/*"],和baseUrl的路径保持匹配。
2. 开发环境(直接运行TS代码,使用ts-node/ts-node-dev)
安装tsconfig-paths依赖,用于运行时解析路径别名:
npm install -D tsconfig-paths
修改你的启动命令,增加注册tsconfig-paths的参数:
- 用
ts-node启动:ts-node -r tsconfig-paths/register src/你的入口文件.ts - 用
ts-node-dev启动:ts-node-dev -r tsconfig-paths/register src/你的入口文件.ts
3. 生产环境(编译为JS后运行)
编译后的JS文件中仍然保留@别名路径,Node.js依然无法识别,需要在编译阶段把别名替换为实际的相对路径,可使用tsc-alias工具实现:
安装依赖:
npm install -D tsc-alias
修改package.json中的编译命令,在tsc编译后执行tsc-alias替换路径:
{ "scripts": { "build": "tsc && tsc-alias" } }
之后执行npm run build得到的编译产物就可以直接用Node运行了。
内容的提问来源于stack exchange,提问作者Adharsh M
相关产品推荐
相关产品推荐

