AWS Elastic Beanstalk运行Grunt任务

时间:2014-05-03 12:17:18

标签: node.js gruntjs elastic-beanstalk

我想在弹性beanstalk上运行node.js应用程序。我有一个客户端,由一个咕噜咕噜的工作(玉,少,concat等)构建我从git中排除了这个文件夹

我可以通过由grunt buildClient

执行的grunt-cli进行本地运行

我在我的包grunt

中添加了grunt-clidev-dependencies

我想在启动应用程序之前运行grunt构建,我已经在.ebextensions/app.config

中设置了配置
container_commands:
  01_build_client:
    command: grunt buildClient

我猜我的cwd是/tmp/deployment/application/

但有Fatal error: Unable to find local grunt说。我猜grunt-cli已安装,但为什么会出现这个错误?

我也尝试将咕噜咕噜的工作放在postinstall的{​​{1}}部分,但这也不起作用。

如何在EBS实例上构建我的grunt作业?

3 个答案:

答案 0 :(得分:2)

在paas上运行Grunt时,最好在项目中本地安装grunt-cli和grunt的本地副本。这样它始终可用,并且是您需要的确切版本。然后,您运行npm install而不是grunt,以便postinstall正常运行。

例如,您的package.json可能如下所示:

"grunt": "0.4.5",
"grunt-cli": "0.1.13",

答案 1 :(得分:1)

您可以使用--gruntfile <pathToGruntfile>上的grunt command选项指定gruntfile的路径。但是,在运行此操作之前,您还需要npm install grunt,否则您将收到相同的错误。

答案 2 :(得分:1)

我试图在弹性beanstalk上获取webpack bundilng时遇到了类似的问题。我发现当弹性beanstalk运行npm安装时,它包含--production标志。这意味着您需要将dev依赖项移动到依赖项块中。

其他让我感到困惑的是,eb似乎没有运行postinstall脚本,这真的很烦人!我确实发现它运行prestart脚本。

我的package.json文件最终看起来像这样:

{
  "name": "app",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "start": "node index.js",
    "prestart": "node node_modules/webpack/bin/webpack.js"
  },
  "dependencies": {
    "backbone": "^1.2.1",
    "backbone.marionette": "^2.4.1",
    "webpack": "^1.9.10",
    ...
  }
}