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

如何使用TypeScript与PM2解决experimentalDecorators警告问题

问题根因

你本地是预先执行tsc命令读取tsconfig.json配置完成编译后再运行代码,而当前PM2配置直接执行.ts源文件,没有走tsc编译流程,运行时没有读取到装饰器相关配置,因此抛出特性不支持的错误。

解决方案

方案1:预编译后运行(推荐,全环境适用)

先执行tsc把TS代码编译为JS,再用PM2运行编译后的产物,性能更高,也不会出现配置不匹配的问题。

  1. 先修改tsconfig.json的include配置,把根目录的index.ts纳入编译范围:
{
  // 其余配置保持不变
  "include": ["src", "index.ts"]
}
  1. 在package.json中添加执行脚本:
{
  "scripts": {
    "build": "tsc",
    "start:dev": "npm run build && pm2 start ecosystem.config.js",
    "start:prod": "npm run build && pm2 start ecosystem.config.js --env production"
  }
}
  1. 修改ecosystem.config.js的入口文件指向编译后的产物:
module.exports = {
  apps : [{
    name: "app",
    // 指向tsc编译后的JS入口文件
    script: './dist/index.js',
    autorestart: true,
    exec_mode: "fork",
    // 生产环境建议关闭文件监听
    watch: process.env.NODE_ENV === 'development',
    env: {
      NODE_ENV: 'development',
    },
    env_production: {
      NODE_ENV: 'production',
    },
  }],
};

方案2:直接运行TS文件(仅适合开发环境)

如果需要开发阶段热更不用手动编译,可以给PM2配置ts-node作为解释器,运行时自动读取tsconfig.json配置。

  1. 先在服务器安装必要依赖:
npm install ts-node typescript --save-dev
  1. 修改ecosystem.config.js配置解释器参数:
module.exports = {
  apps : [{
    name: "app",
    script: './index.ts',
    // 指定ts-node作为解释器
    interpreter: 'node_modules/.bin/ts-node',
    // 指定读取当前目录的tsconfig.json配置
    interpreter_args: '--project tsconfig.json',
    autorestart: true,
    exec_mode: "fork",
    watch: true,
    env: {
      NODE_ENV: 'development',
    },
  }],
};

注意事项

  • 部署时确认服务器上的tsconfig.json文件和本地一致,没有被.gitignore规则过滤
  • 生产环境优先使用方案1,ts-node运行TS会有额外的编译开销,性能远低于直接运行编译后的JS文件

内容的提问来源于stack exchange,提问作者Webplam Web

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 06:45:01