找不到 bin/www 的 PM2 脚本

PM2 Script Not Found for bin/www

最近我决定 运行 我的应用程序使用 pm2 作为服务。对我来说 pm2 start app.mjs 运行 应用程序即服务,但似乎 pm2 没有 运行 我的 express 应用程序正确。我使用 express npm 构建了一个这样的应用程序:

//Imports
import express from "express";

//Setups
const app = express();
const port = process.env.PORT;

app.get("/", async (req, res) => {
  res.send("Hello world!");
});

//Running server
app.listen(port, () => {
  console.log(`Server is running on port ${port}`);
});

还尝试了 pm2 start ./bin/www,这给了我一个 Script not found 错误,而且 express-generator 似乎没问题,而不是应用程序旁边的 express npm。应用程序在开发模式下正常运行 (node app.mjs)。

更新

我在 Konstantinos Lamogiannis 的帮助下解决了这个问题。设置配置文件和答案后,我将我的 app.mjs 更改为 app.js 表单并将 import 样式更改为 const variable = require(""); 并解决了我的问题。我不知道为什么会这样,但似乎 pm2 npm 可能与支持 import ES6 语法的新 nodejs 功能冲突。

pm2 日志给我这个错误:unhandledRejection 你可能忘记捕捉 Promise 拒绝!

您可以尝试在您的项目根文件夹中创建一个名称为 ecosystem.config.js 的文件,然后在该文件中添加以下代码:

module.exports = {
  apps: [{
    name: 'yourAppName',
    script: 'bin/www/app.mjs', // the path of the script you want to execute,
    // Options reference: https://pm2.keymetrics.io/docs/usage/application-declaration/
    instances: 1,
    autorestart: true,
    watch: false,
    error_file: 'err.log',
    out_file: 'out.log',
    log_file: 'combined.log',
    time: true,
    env: {
    },
  }],
};

在上面的配置中,您会注意到在脚本 属性 中它的值是 bin/www/app.mjs。我假设您在 bin/www 目录下有 app.mjs 并放置了该值。

然后运行pm2-runtime start ecosystem.config.js

编辑#1

假设您的启动文件位于项目的根目录中,请使用 script: 'app.mjs'.

所以你的最终 ecosystem.config.js 将是:

module.exports = {
  apps: [{
    name: 'yourAppName',
    script: 'app.mjs', // the path of the script you want to execute,
    // Options reference: https://pm2.keymetrics.io/docs/usage/application-declaration/
    instances: 1,
    autorestart: true,
    watch: false,
    error_file: 'err.log',
    out_file: 'out.log',
    log_file: 'combined.log',
    time: true,
    env: {
    },
  }],
};

然后从您的根项目目录(app.mjs 所在的位置)尝试 pm2-runtime start ecosystem.config.js