Node.js+TypeScript运行报Cannot find module模块找不到错误
报错根因
tsconfig.json中配置的paths路径别名仅在TypeScript做类型检查阶段生效,默认不会将别名路径转换为Node.js可识别的真实模块路径。你当前使用ts-node直接运行TS代码时,没有引入路径映射转换的逻辑,Node.js原生CommonJS模块解析规则无法识别user/routes这类别名导入,因此抛出MODULE_NOT_FOUND错误。
额外注意:你当前的启动命令指定执行路径为./src,未明确指向入口文件./src/index.ts,也可能加剧路径解析异常。
修复方案(三选一即可,推荐方案1)
方案1:保留现有路径别名写法,添加运行时路径解析支持
这是对现有代码改动最小的方案:
- 安装路径解析依赖:
npm install -D tsconfig-paths
- 修改package.json中的启动命令,为ts-node注册路径映射钩子,同时明确指定入口文件:
"nodemon --watch 'src' -e ts,tsx --exec ts-node -r tsconfig-paths/register ./src/index.ts"
你的tsconfig中baseUrl和paths的映射规则本身配置正确,添加上述配置后即可正常识别别名导入。
方案2:改用相对路径导入(零额外依赖)
如果不想新增依赖,可以直接将别名导入替换为Node.js原生支持的相对路径,修改src/index.ts中的导入语句:
// 原写法 import router from "user/routes"; import router from "./user/routes";
因为index.ts和user目录同属src层级,相对路径./user/routes可以被Node.js直接解析,不需要额外配置。
方案3:替换运行时工具为自带别名解析的实现
如果你后续有更复杂的TS运行需求,可以把ts-node替换为tsx这类自带tsconfig路径别名解析的运行工具,无需额外配置即可识别paths规则:
- 安装依赖:
npm install -D tsx
- 修改启动命令:
"nodemon --watch 'src' -e ts,tsx --exec tsx ./src/index.ts"
注意事项
如果后续需要将TS编译为JS部署上线,记得在编译步骤添加路径别名转换逻辑(比如搭配tsc-alias处理tsc产出的JS文件,或使用tsup、rollup等自带别名解析的构建工具),避免编译后的代码仍保留别名路径导致线上运行报错。
内容的提问来源于stack exchange,提问作者Saurabh D Vyas
相关产品推荐
相关产品推荐

