使用PM2部署Node.js API时遇ts-node/register模块找不到错误求助
PM2部署Node.js API报错:找不到ts-node/register模块
错误信息
Failed to load Typescript interpreter: Cannot find module 'ts-node/register' Require stack: - /usr/local/lib/node_modules/pm2/lib/ProcessContainer.js Server Running On: 0.0.0.0:8080
相关配置
ecosystem.config.ts
module.exports = { apps: [ { name: "api", script: "src/server.ts", instances: "1", exec_mode: "cluster", interpreter: "./node_modules/.bin/ts-node", interpreter_args: "--require ts-node/register/transpile-only --require tsconfig-paths/register", merge_logs: true, max_restarts: 10, }, ], };
package.json(devDependencies片段)
"devDependencies": { ... "ts-node": "^10.7.0", "ts-node-dev": "^1.1.8", "tsconfig-paths": "^3.14.1", "typescript": "^4.6.3" },
问题原因及解决办法
依赖安装范围问题:ts-node被放在
devDependencies中,若部署时执行了npm install --production,开发依赖不会被安装,导致PM2找不到ts-node模块。
解决:将ts-node移至dependencies字段,或部署时直接执行npm install(不带--production参数)。解释器路径解析问题:
./node_modules/.bin/ts-node是相对路径,PM2的进程容器可能无法正确识别该路径。
解决:换成npx ts-node(让npx自动定位本地ts-node),或在ecosystem配置中添加cwd字段指定项目根目录,示例:cwd: "/你的项目根目录绝对路径",重复配置冲突:ts-node本身已内置register加载逻辑,
interpreter_args中添加--require ts-node/register/transpile-only属于重复配置,易引发加载冲突。
解决:移除该重复参数,仅保留--require tsconfig-paths/register即可。全局PM2与本地依赖不兼容:若PM2为全局安装,它可能优先使用全局环境依赖,而非项目本地依赖。
解决:使用本地PM2启动项目(npx pm2 start ecosystem.config.ts),或避免全局安装PM2直接用本地版本管理。
内容的提问来源于stack exchange,提问作者Kay
相关产品推荐
相关产品推荐

