我正在使用AWS Lambda,它涉及创建我的node.js脚本的存档,包括node_modules
文件夹并将其上传到他们的基础架构以运行。
这种方法很好,除了涉及具有本机绑定的节点模块(使用node-gyp)。由于绑定已在我的本地计算机(OS X)上进行编译和项目存档,因此它与AWS(Amazon Linux)服务器不兼容。
如何交叉编译/安装节点模块(具体来说,node-sqlite3),这样当我将其上传到另一个服务器时,它会运行吗?
答案 0 :(得分:9)
虽然不是解决问题的方法,但一个非常简单的解决方法是简单地在Linux机器上编译本机插件。
根据您的具体情况,我会使用Vagrant。 Vagrant可以创建虚拟机并在几秒钟内完成配置。
yum
作为程序包管理器的人 - 请参阅Wiki)npm install
(可选择它还可以删除 node_modules 文件夹,以确保安装干净)如果链接库不在目标机器上的相同位置,可能需要进行一些调整,但一般来说,这似乎是最好和最快的解决方案。
答案 1 :(得分:2)
虽然在某些情况下使用Vagrant安装应用程序可能就足够了,但我发现有必要在Linux上构建应用程序尽可能接近Lambda的Amazon Linux AMI 。
您可以在此处阅读原始答案:https://stackoverflow.com/a/34019739/303184
使其发挥作用的步骤:
生成新的EC2实例。确保它基于与AWS Lambda运行时完全相同的映像。您可以在此处查看Lambda env详细信息:http://docs.aws.amazon.com/lambda/latest/dg/current-supported-versions.html。在我们的例子中,亚马逊Linux AMI被称为 amzn-ami-hvm-2015.03.0.x86_64-gp2 。
安装nvm
并使用它来安装与AWS Lambda相同版本的Node.js。在撰写本文时,它是 v0.10.36 。您可以再次参考http://docs.aws.amazon.com/lambda/latest/dg/current-supported-versions.html查找。
您可能需要安装git& EC2上的g ++编译器。你可以运行
sudo yum install git gcc-c++
最后,将您的应用程序克隆到新的EC2并安装应用程序的依赖项:
nvm use 0.10.36
npm install --production
然后,您可以使用scp
等轻松下载node_modules。
答案 2 :(得分:1)
与Robert的回答相同,当我不得不在不同的操作系统中处理我的MAC时,我使用vm ware就像Oracle的免费虚拟器VirtualBox一样在我的mac上安装linux,这对我来说没有任何代价。或者注册一个新的AWS账户,您可以免费获得一年的微观账户。用它来获取你的linux盒子,做你需要的任何事情。
答案 3 :(得分:1)
AWS有一个描述如何处理本机NPM模块的页面:https://aws.amazon.com/blogs/compute/nodejs-packages-in-lambda/