我正在尝试在Elastic Beanstalk上部署我的节点服务器,但它不起作用,因为最新版本的Elastic Beanstalk支持开箱即用0.12。6(2015年7月)。使用io.js或最新的节点版本(4.1.2)都是可行的选择,但不清楚如何通过beanstalk运行ec2实例来实现这一点。
我尝试了很多东西,包括:
/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)为什么只运行最新稳定版本的节点以及在AWS上被广泛支持4个月的东西是如此困难?
答案 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
他们的文档中有大量的步骤,但简单来说,您需要:
如果要运行具有ES2015功能的节点,则另一个选项是使用babel cli。
您需要向start
添加package.json
任务:
{
"scripts": {
"start": "babel-node index.js",
},
"dependencies": {
"babel": "^5.8.23",
}
}
...然而
不适合生产使用
你不应该在生产中使用babel-node。由于高速缓存存储在存储器中,因此存储器使用率很高,这是不必要的。您还将始终遇到启动性能损失,因为整个应用程序需要动态编译。