使用ts-node-dev运行TypeScript+Express项目时报错找不到模块'src/app'
问题根因
你当前的报错是因为ts-node-dev(缩写tsnd)未处理tsconfig.json中配置的baseUrl导致的路径解析异常:
- 你在代码中使用了非相对路径导入
src/app(比如写法为import app from 'src/app'),依赖tsconfig.json中的baseUrl: "./"配置做路径解析 - Jest运行正常是因为你在
jest.config.js中配置了moduleDirectories: ['node_modules', './'],Jest会主动从项目根目录检索模块,能正确解析路径 ts-node-dev默认不会读取tsconfig的baseUrl配置做模块解析,因此启动时无法找到对应模块
解决方案
提供两种常用方案,可根据项目情况选择:
方案一:使用tsconfig-paths处理路径别名(推荐,适配大项目多路径别名的场景)
- 安装开发依赖
npm i -D tsconfig-paths
- 修改
package.json中的scripts配置,给tsnd命令添加注册tsconfig-paths的参数:
{ "scripts": { "start": "tsnd --require tsconfig-paths/register src/server.ts", "debug": "tsnd --require tsconfig-paths/register --inspect=0.0.0.0:7001 --exit-child --respawn src/server.ts" } }
- 若编译打包后直接运行
dist目录的产物也出现同类报错,可以选择两种处理方式:- 运行时加载
tsconfig-paths:node -r tsconfig-paths/register dist/server.js - 编译时替换别名:安装
tsc-alias依赖,在build脚本中追加&& tsc-alias,编译时自动把所有别名路径替换为相对路径
- 运行时加载
方案二:修改为相对路径导入(适合小项目,无需额外依赖)
直接把src/server.ts中导入app的写法修改为相对路径即可:
// 把原非相对路径的导入写法 // import app from 'src/app' // 修改为相对路径写法 import app from './app'
修改完成后重新执行npm start即可正常启动项目。
内容的提问来源于stack exchange,提问作者bahejam379
相关产品推荐
相关产品推荐

