ApolloServer/Express项目ts-node启动无堆栈仅返回exit code 1崩溃求助
排查步骤
第一步:优先捕获完整错误堆栈
当前无报错信息是排查的最大障碍,先通过以下方式拿到完整错误栈:
- 替换启动命令输出全量错误:用
node --trace-warnings -r ts-node/register src/app.ts替代原ts-node src/app.ts命令,会打印所有未捕获异常、警告的完整调用栈 - 代码顶部加全局异常捕获逻辑:
// 放在src/app.ts最开始的位置 process.on('uncaughtException', (err) => { console.error('未捕获异常:', err.stack) process.exit(1) }) process.on('unhandledRejection', (reason, promise) => { console.error('未处理Promise拒绝:', promise, '原因:', reason?.stack || reason) })
- 查看pm2运行日志:默认日志存放在
~/.pm2/logs/目录下,对应进程的error日志会记录崩溃原因
第二步:结合异常特征定向排查
端口权限/占用问题
- Debian系统默认禁止普通用户监听1024以下的低端口(如80、443),如果你的服务监听的是低端口,普通用户直接跑ts-node会直接崩溃,Windows无低端口监听限制、ts-node-dev/pm2可能有临时权限提升逻辑,完全符合你描述的差异特征,可以先将监听端口改为3000以上的高位端口测试。
- 确认端口无其他进程占用:执行
netstat -tulpn | grep 你的监听端口即可排查。
系统依赖兼容问题
- 你使用的Node14版本要求glibc版本≥2.17,Debian9默认预装的glibc版本可能偏低,执行
ldd --version即可核对版本,glibc版本不匹配会导致Node运行时偶发崩溃,完全符合pm2运行时偶尔能恢复的特征。 - 跨系统依赖兼容问题:不要直接复制Windows环境的
node_modules目录到Debian使用,删除node_modules和yarn.lock后重新执行yarn install安装Linux版本的二进制依赖包。
ts-node运行配置差异
- ts-node-dev默认启用
--files参数加载tsconfig.json的files/include配置,原生ts-node默认不启用该参数,你可以在启动命令中加参数测试:ts-node --files src/app.ts - 核对tsconfig.json的
target配置,Node14对应的编译目标应为ES2020,配置错误会导致运行时语法兼容问题。
内容的提问来源于stack exchange,提问作者petterrn
相关产品推荐
相关产品推荐

