You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用PM2运行含TypeScript路径别名的Node.js应用时模块找不到

解决PM2启动TypeScript Express应用时路径别名找不到的问题

我基于TypeScript开发的Express项目,在tsconfig.json中配置了@/*指向./src/*的路径别名,构建过程正常,但用PM2启动编译后的build/index.js时,出现Error: Cannot find module '@/config/routes'的错误,仅在使用别名导入时触发。

方法一:编译时替换路径别名(推荐生产环境)

TypeScript编译器tsc仅做类型检查,不会自动替换路径别名,导致编译后的JS文件仍保留@/前缀,Node.js无法识别。可以用tsc-alias工具在编译后自动替换别名:

  1. 安装依赖:
npm install --save-dev tsc-alias
  1. 修改package.json的build脚本,在编译后执行别名替换:
"build": "tsc --build && tsc-alias"
  1. 调整PM2启动脚本,无需再加载tsconfig-paths/register:
"start": "pm2 start build/index.js --name backendathenas --watch"

编译后的JS文件中,所有@/开头的导入都会被替换为对应的相对路径,Node.js可以直接识别,不需要运行时钩子。

方法二:修复PM2启动时的tsconfig-paths加载问题

如果不想额外安装工具,可以调整PM2的启动参数,确保tsconfig-paths/register能正确读取配置:

问题根源是PM2启动时的工作目录可能不是项目根目录,导致tsconfig-paths找不到配置文件。可以指定工作目录并显式指定配置文件路径:

修改package.json的start脚本:

"start": "pm2 start build/index.js --name backendathenas --watch --cwd ./ --node-args=\"-r tsconfig-paths/register --project ./tsconfig.json\""
  • --cwd ./:指定PM2的工作目录为项目根目录
  • --project ./tsconfig.json:告诉tsconfig-paths读取根目录下的配置文件

方法三:开发环境用ts-node直接运行(不推荐生产)

如果是开发阶段,可以直接用ts-node运行TypeScript源码,同时加载路径别名:

  1. 安装依赖:
npm install --save-dev ts-node
  1. 添加开发启动脚本:
"start:dev": "pm2 start ts-node --name backendathenas-dev --watch -- src/index.ts -- -r tsconfig-paths/register"

这种方式不需要提前编译,但性能不如编译后的JS,适合开发调试用。

内容的提问来源于stack exchange,提问作者Nicolas Bispo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 04:08:12