将pm2与nodemon一起使用会产生错误的描述符错误

时间:2018-11-02 06:36:42

标签: javascript ecmascript-6 babel pm2 nodemon

我现在的项目是完全ES6 +,具有导入/导出功能,而node.js尚不支持此功能,因此我使用nodemon + babel来运行它。 package.json如下:

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

现在我要移至pm2来管理此应用程序,我具有以下ecosystem.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?

1 个答案:

答案 0 :(得分:0)

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

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

使用默认解释器(节点)

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

使用bash作为解释器

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

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

npm start

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

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