ts-node中tsconfig paths配置失效,求助解决方案
解决ts-node无法识别TypeScript路径别名的问题
问题场景
项目结构:
. ├── src │ ├── utils │ │ └── logger.ts │ ├── custom │ │ └── services | | └── func.service.ts │ └── index.ts ├── package.json └── tsconfig.json
tsconfig.json配置:
{ "compilerOptions": { "target": "ES6", "module": "CommonJS", "outDir": "./dist", "baseUrl": "./src", "removeComments": true, "incremental": true, "esModuleInterop": true, "paths": { "@utils/*": [ "utils/*" ], "@custom/*": [ "custom/*" ] } }, "include": [ "src/**/*.ts" ], "exclude": [ "node_modules" ] }
使用import { Log } from '@utils/logger'导入模块,执行ts-node src/index时提示Cannot find module '@utils/logger',但VSCode智能提示可正常识别路径。
解决方案
步骤1:安装依赖
安装tsconfig-paths包,它能帮助ts-node解析tsconfig中的paths配置:
yarn add tsconfig-paths --dev
步骤2:修改运行配置
有两种可选方式:
- 方式一:调整package.json的dev脚本
将原有脚本改为:
{ "scripts": { "dev": "ts-node -r tsconfig-paths/register src/index" } }
-r tsconfig-paths/register会在ts-node启动前加载路径映射规则。
- 方式二:在tsconfig.json中添加ts-node配置
在tsconfig.json内新增ts-node配置块,让ts-node自动读取路径映射:
{ "compilerOptions": { // 保留原有配置不变 }, "ts-node": { "require": ["tsconfig-paths/register"] }, "include": [ "src/**/*.ts" ], "exclude": [ "node_modules" ] }
修改后直接运行原命令ts-node src/index即可生效。
步骤3:验证
重新执行yarn dev,此时ts-node将正确解析@utils/logger这类别名路径,模块找不到的错误会消失。
原因说明
VSCode的TypeScript语言服务会直接读取tsconfig中的paths配置实现智能提示,但ts-node本身默认不处理这类别名映射,必须借助tsconfig-paths将别名转换为实际文件路径,才能在运行时正确加载模块。
内容的提问来源于stack exchange,提问作者Sesha
相关产品推荐
相关产品推荐

