Node/TypeScript项目执行node dist/index.js提示找不到模块求助
问题分析与解决方法
问题根源
你在tsconfig.json里设置了baseUrl: "./src",这让TypeScript允许你用非相对路径(比如import ... from 'services/jwt')导入模块,但编译成CommonJS后,Node.js的模块解析逻辑不支持这种路径——Node.js默认会去node_modules目录查找模块,而非当前目录下的services文件夹,所以会报错找不到模块。
编译后的代码里,导入语句仍保持require('services/jwt')的形式,Node.js无法识别这是本地模块路径。
解决方案
方案一:用工具替换编译后的路径(推荐)
使用tsc-alias工具,自动把编译后代码中的非相对路径替换成Node.js能识别的相对路径:
- 安装依赖:
npm install -D tsc-alias
- 修改
package.json的编译脚本,让编译后自动处理路径:
{ "scripts": { "build": "tsc && tsc-alias" } }
- 重新编译并运行项目:
npm run build node dist/index.js
方案二:改用相对路径导入
直接把所有非相对导入改成相对路径,比如在需要导入services/jwt的文件中,把:
import { jwtService } from 'services/jwt';
改成:
import { jwtService } from './services/jwt'; // 根据文件所在层级调整相对路径
编译后会生成require('./services/jwt'),Node.js就能正确找到对应模块。
方案三:运行时指定模块解析路径
通过tsconfig-paths让Node.js在运行时识别TypeScript的路径配置:
- 安装依赖:
npm install -D tsconfig-paths
- 修改启动脚本或直接执行命令:
node --require tsconfig-paths/register dist/index.js
也可以把这个命令写到package.json的scripts里:
{ "scripts": { "start": "node --require tsconfig-paths/register dist/index.js" } }
内容的提问来源于stack exchange,提问作者Teehbow
相关产品推荐
相关产品推荐

