【可能方案】pm2来运行ts文件【和运行js差距很大哦】TypeError [ERR_UNKNOWN_FILE_EXTENSION]: Unknown file extension “.ts“

最权威的解决方案如下:【pm2运行ts的终极解决方案】使用pm2+ tsx 运行 TypeScript 文件指南-优快云博客

GPT最开始推荐的方案是:

pm2 start xx.ts --interpreter ts-node-esm

但是使用你用的是 --interpreter ts-node-esm 但仍然报

TypeError [ERR_UNKNOWN_FILE_EXTENSION]: Unknown file extension ".ts"

可能的解决方案【不一定可以】:

pm2 start xx.ts --name xx --interpreter node --node-args "--loader ts-node/esm"

✅ 这个绝对能跑,彻底绕过 PM2 不识别 .ts 的问题。

✅ 解释:
--interpreter node: 让 PM2 使用原生 node 启动(绕过 bug)
--node-args "--loader ts-node/esm": 指定用 ts-node 的 ESM 加载器处理 .ts 文件
✅ 这个方式是 TypeScript 官方和 ts-node 推荐的在 ESM 模式下的启动方法。

📄 等价配置(ecosystem.config.js 推荐)

module.exports = {
  apps: [
    {
      name: 'xx',
      script: 'xx.ts',
      interpreter: 'node',
      node_args: '--loader ts-node/esm',
      cwd: '/root/docker-root/myProject',
      watch: false
    }
  ]
};
pm2 start ecosystem.config.js

警告提示:

(node:10350) ExperimentalWarning: --experimental-loader may be removed in the future; instead use register():
--import 'data:text/javascript,import { register } from "node:module"; import { pathToFileURL } from "node:url"; register("ts-node/esm", pathToFileURL("./"));'
(Use node --trace-warnings ... to show where the warning was created)

是 Node.js 对 --loader 的一个“实验功能警告”,并不是报错,也不会影响运行。

✅ 方法 2:忽略这个 warning(推荐)
这才是目前主流做法,继续使用 --loader ts-node/esm 即可
你可以放心用它,等将来 Node 正式改变方式,再统一升级。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值