弹性Beanstalk和ES6

4
我正在尝试将我的Node服务器部署到Elastic Beanstalk上,但它无法工作,因为Elastic Beanstalk支持的最新版本是0.12.6(2015年7月)。使用io.js或最新的Node版本(4.1.2)都是可行的选项,但不清楚如何让Beanstalk启动的EC2实例执行此操作。
我已经尝试了很多方法,包括:
将4.1.2源代码添加到我的.ebextensions配置文件中,然后更新/tmp/deployment/config/#etc#init#nodejs.conf中的引用,但console.log(process.argv)仍然是0.12.6。此外,第二次运行时会出现一些“文本文件繁忙”错误,可能是因为它正在尝试在node仍在运行时更改node包的源... (请参见https://forums.aws.amazon.com/thread.jspa?threadID=169385); 添加一个文件来下载4.1.2源并解压缩它,并像https://github.com/kopurando/better-faster-elastic-beanstalk中那样更新引用,但这似乎也不起作用(版本仍为0.12.6)。为什么要在AWS上运行最新稳定版本的node和已被广泛支持的内容如此困难?
2个回答

11

不必使用 node v4,您可以使用Babel将ES6代码编译为ES5代码,并部署ES5代码到Beanstalk。

假设您的所有源代码都在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中使用npm start来启动你的服务器。

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

我喜欢使用Babel来编写ES6代码,因为它支持更多的新特性。

你可以在这里找到Node.js服务器示例代码。

Babel的首页是https://babeljs.io/


0

一种选择是创建自定义 AMI(Amazon Machine Image),并使用它来部署您的应用程序:

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

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

  1. 启动服务器
  2. 按照您的意愿自定义安装
  3. 创建一个镜像
  4. 使用新创建的 AMI 创建弹性 Beanstalk 环境

如果您想要运行带有 ES2015 功能的 Node,则另一种选择是使用 babel cli

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

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

然而...

不适用于生产环境

您不应该在生产环境中使用babel-node。它是不必要的重量级工具,由于缓存存储在内存中,会占用大量内存。您还将始终经历启动性能惩罚,因为整个应用程序需要即时编译。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接