使用PM2运行Typescript应用程序

时间:2019-06-12 16:21:07

标签: javascript typescript pm2

我有一个用Typescript编写的与PM2一起运行的应用程序。目前,我编译为JavaScript,然后使用PM2启动该应用程序。我的ecosystem.config.js文件如下所示:

module.exports = {
  apps: [
    {
      name: 'My Application',
      script: './dist/server/index.js',
      env_qa: {
        PORT: 3001,
        NODE_ENV: 'production',
      },
      env_production: {
        PORT: 3000,
        NODE_ENV: 'production',
      },
    },
  ],
};

我使用以下命令运行它:

pm2 stop ecosystem.config.js --env qa

在开发时,我只运行ts-node server而不是编译和使用PM2。我最近读到ts-node具有'transpileOnly'或'fast'模式,这意味着它可以在生产中使用。首先,我想知道是否可以在生产环境中使用它。其次,我如何仍然使用PM2来启动我的应用程序,但使用ts-node?

3 个答案:

答案 0 :(得分:1)

package.json

{
  "scripts": {
    "pm2": "NODE_ENV=production pm2 start server.ts --watch"
  },

基于https://pm2.io/docs/runtime/integration/transpilers/

答案 1 :(得分:1)

我做了一个简单的解决方案,使用项目根目录下的pm2配置文件:

project
│   pm2.config.js
│   package.json  
│   tsconfig.json    
│
└───src
│   │   index.ts
└───dist
    │   index.js

pm2.config.js

module.exports = {
    apps: [
        {
            name: 'My Application',
            script: './dist/index.js',
        },
    ],
};

package.json

"scripts": {
 "dev": "ts-node-dev --respawn --transpile-only ./src/index.ts",
 "start": "tsc && node ./dist/index.js",
 "pm2": "tsc && pm2 start pm2.config.js"
}

注意:如果您愿意,您也可以将 && pm2 save 添加到 pm2 脚本中

现在在开发中,输入:npm run dev 并在生产中,使用 npm run pm2

注册到 pm2

答案 2 :(得分:0)

package.json 脚本应如下所示:

package.json 文件(包含以下示例脚本)

"scripts": {
    "shivkumarscript": "ts-node -T -P server/tsconfig.json server/index.ts"
  }

ecosystem.config.json 文件

module.exports = {
    apps: [
        {
            name: "NodeServer",
            script: "npm",
            automation: false,
            args: "run shivkumarscript",
            env: {
                NODE_ENV: "development"
            },
            env_production: {
                NODE_ENV: "production"
            }
        }
    ]
}

假设你已经在你的机器上安装了 Node.js、NPM 和 PM2。那么下面应该是通过 pm2 启动应用程序的命令,它将依次运行 npm 脚本(在应用程序的 package.json 文件中提到的命令行):

对于生产环境:

pm2 start ecosystem.config.js --env production --only NodeServer

对于开发环境:

pm2 start ecosystem.config.js --only NodeServer

...还有嘘!伙计们