【问题标题】:using pm2 with nodemon gives bad descriptor error将 pm2 与 nodemon 一起使用会产生错误的描述符错误
【发布时间】:2019-04-06 09:53:36
【问题描述】:

我现在的项目完全是 ES6+,有导入/导出和 node.js 还不支持的东西,因此我使用 nodemon + babel 来运行它。 package.json 看起来像:

"scripts": {
    "start": "nodemon server/server.js --exec babel-node --presets babel-preset-env"
}

现在我正在转移到 pm2 来管理这个应用程序,我有以下生态系统.config.js:

module.exports = {
  apps: [
    {
      name: 'test:app',
      script: 'npm -- start',
      watch: true,
    },
  ],
};

这会启动应用程序,但会出现以下错误:

3|your-tab | Error: EBADF: bad file descriptor, uv_pipe_open
3|your-tab |     at Object._forkChild (child_process.js:115:5)
3|your-tab |     at Object.setupChildProcessIpcChannel (internal/process/main_thread_only.js:117:30)
3|your-tab |     at startup (internal/bootstrap/node.js:135:23)
3|your-tab |     at bootstrapNodeJSCore (internal/bootstrap/node.js:739:3)
3|your-tab | child_process.js:115
3|your-tab |   p.open(fd);

我认为我的生态系统文件有误,但是如何修复它以便我可以运行 pm2 + babel + nodemon?

【问题讨论】:

    标签: javascript ecmascript-6 babeljs pm2 nodemon


    【解决方案1】:

    生态系统配置中应用的 script 选项必须是存在的路径。

    有一些方法可以为您的应用程序配置生态系统。

    使用默认解释器(节点)

    您可以编写一个节点脚本来启动您的应用程序并将其用于脚本选项。您可能会为此使用“child_process”节点模块。

    使用 bash 作为解释器

    您可以将应用程序的解释器配置为 bash。然后编写一个 bash 脚本来运行您的应用程序。

    假设您有一个 run-yap bash shell 脚本,其中包含:

    npm start
    

    生态系统配置文件应如下所示:

    module.exports = {
      apps: [
        {
           script: "run-yap",
           name: "yap",
           interpreter: "bash",
        }
      ]
    }
    

    【讨论】:

      猜你喜欢
      • 2015-12-10
      • 1970-01-01
      • 2021-07-02
      • 2021-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-14
      相关资源
      最近更新 更多