如何通过EB的NodeCommand调用多个命令?

时间:2018-06-20 00:19:54

标签: node.js amazon-web-services elastic-beanstalk lerna

上下文

在AWS的Elastic Beanstalk上提供一个简单的Node应用程序(例如eb-node-express-sample),并使用默认的nodecommand.config文件,如下所示:

option_settings:
  aws:elasticbeanstalk:container:nodejs:
    NodeCommand: npm start

问题

如何代替npm start调用多个bash命令?我希望能够执行以下操作:

    NodeCommand: echo 'Hello' && npm start

或:

    NodeCommand: |
      echo 'Hello'
      npm start

但是似乎第一个单词之后的所有内容实际上都是作为单个参数传递的,从而在/var/log/nodejs/nodejs.log中产生以下输出:

'Hello' && npm start
'Hello' && npm start
'Hello' && npm start
...

# Logged repeatedly as the server tries and fails to start,
# apparently invoking `echo "'Hello' && npm start"` each time...

有什么方法可以解决这个愚蠢的限制并直接运行多个bash命令吗?

动机

我有一个Lerna应用,该应用没有在根目录中包含任何有用的start脚本,而在start中具有一个packages/api/脚本。我的特别需要是能够在运行start之前更改目录,但是我正在寻找一种通用的解决方案来解决运行多个命令的问题。

1 个答案:

答案 0 :(得分:0)

我的解决方法是将脚本添加到package.json

"scripts": {
  "start": "node app.js",
  "start:eb": "echo 'Hello' && npm start"
}

用法:

option_settings:
  aws:elasticbeanstalk:container:nodejs:
    NodeCommand: npm run start:eb

万一它与其他人有关,我之所以来到这里,是因为nginx出现了一个模糊的502 Bad Gateway错误,原因是服务器未启动,但/var/log/nodejs/nodejs.log中却完全没有启动。我终于意识到这是由于AWS破坏了NodeCommand。