Elastic Beanstalk和ES6

时间:2015-10-07 00:04:55

标签: javascript elastic-beanstalk amazon-elastic-beanstalk

我正在尝试在Elastic Beanstalk上部署我的节点服务器,但它不起作用,因为最新版本的Elastic Beanstalk支持开箱即用0.12。6(2015年7月)。使用io.js或最新的节点版本(4.1.2)都是可行的选择,但不清楚如何通过beanstalk运行ec2实例来实现这一点。

我尝试了很多东西,包括:

  1. 将4.1.2源添加到我的.ebextensions配置文件中,然后更新/tmp/deployment/config/#etc#init#nodejs.conf中的引用,但console.log(process.argv)仍为0.12.6。更重要的是,第二次运行此操作时,我得到一些text file busy错误,大概是因为它在节点仍在运行时尝试更改节点包的源...(参见https://forums.aws.amazon.com/thread.jspa?threadID=169385
  2. 添加一个下载4.1.2源文件的文件并对其进行解压缩并更新https://github.com/kopurando/better-faster-elastic-beanstalk中的引用,但这似乎也不起作用(版本仍为0.12.6)
  3. 为什么只运行最新稳定版本的节点以及在AWS上被广泛支持4个月的东西是如此困难?

2 个答案:

答案 0 :(得分:8)

您可以使用babel将es6代码编译为es5代码,并将es5代码部署到beanstalk,而不是使用节点v4。

假设您的所有源代码都在lib目录中,并带有启动服务器的index.js文件。

lib/
    index.js
    other

然后您可以使用babel lib -d dist编译lib目录中的es6文件,并在dist目录中创建es5版本的文件。

dist/
    index.js
    other

然后您可以node dist/index.js运行您的服务器,只需要更改package.json如下beanstalk,因为beanstalk使用npm start来运行您的服务器

"scripts": {
  "start": "node dist/index.js"
}

我喜欢使用babel作为es6,因为它对新功能有更多的报道。 您可以找到更多信息

node.js服务器示例:https://github.com/babel/example-node-server

babel主页:https://babeljs.io/

答案 1 :(得分:0)

一种选择是创建自定义AMI(亚马逊机器映像)并使用它来部署您的应用程序:

http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/using-features.customenv.html

他们的文档中有大量的步骤,但简单来说,您需要:

  1. 启动服务器
  2. 根据您的意愿自定义安装
  3. 制作图片
  4. 使用新创建的AMI创建弹性beanstalk环境
  5. 如果要运行具有ES2015功能的节点,则另一个选项是使用babel cli

    您需要向start添加package.json任务:

    {
      "scripts": {
        "start": "babel-node index.js",
      },
      "dependencies": {
        "babel": "^5.8.23",
      }
    }
    

    ...然而

      

    不适合生产使用

         

    你不应该在生产中使用babel-node。由于高速缓存存储在存储器中,因此存储器使用率很高,这是不必要的。您还将始终遇到启动性能损失,因为整个应用程序需要动态编译。