使用与node-gyp的本机绑定交叉编译节点模块

我正在使用AWS Lambda,它涉及到创build我的node.js脚本(包括node_modules文件夹)的存档,并将其上传到其基础结构以运行。

这工作正常,除非涉及具有本地绑定的节点模块(使用节点gyp)。 由于绑定已经编译,项目存档在本地计算机(OS X)上,因此与AWS(Amazon Linux)服务器不兼容。

我如何交叉编译/安装一个节点模块(特别是node-sqlite3 ),所以当我把它上传到另一个运行的服务器拱?

虽然不是真正的解决scheme,但是一个非常简单的解决方法就是在Linux机器上简单地编译本地插件。

为了您的具体情况,我会使用stream浪汉 。 Vagrant可以创build虚拟机并在几秒钟内完成configuration。

  1. find类似亚马逊Linux发行版的操作系统映像(Fedora,CentOS,其他使用yum作为包pipe理器的操作系统 – 请参阅Wiki )
  2. 使用一个简单的configuration脚本,当在机器启动时由Vagrant运行时,将运行npm install (可选地,它也可能在删除node_modules文件夹之前确保干净的安装)
  3. 为了更加舒适,脚本还可以创build用于部署的zip文件
  4. 安装完成后,脚本将closures虚拟机以避免不必要的系统资源消耗
  5. 部署!

如果链接的库不在目标机器上的相同位置,可能需要进行一些调整,但通常这对我来说似乎是最好和最快的解决scheme。

虽然在某些情况下使用Vagrant安装应用程序可能已经足够,但我发现有必要在Linux上构build尽可能接近Lambda的Amazon Linux AMI的应用程序。

您可以在这里阅读原始答案: https : //stackoverflow.com/a/34019739/303184

步骤,使其工作:

  1. 产生新的EC2实例。 确保它基于 AWS Lambda运行时完全相同的映像。 您可以在这里查看Lambda环境详情: http : //docs.aws.amazon.com/lambda/latest/dg/current-supported-versions.html 。 在我们的例子中,它是名为amzn-ami-hvm-2015.03.0.x86_64-gp2的 Amazon Linux AMI。

  2. 安装nvm并使用它安装与AWS Lambda相同版本的nvm 在撰写本文时,这是v0.10.36 。 你可以再次参考http://docs.aws.amazon.com/lambda/latest/dg/current-supported-versions.html找出。

  3. 您可能需要在EC2上安装git&g ++编译器。 你可以做这个运行

     sudo yum install git gcc-c++ 
  4. 最后,将您的应用程序克隆到您的新EC2并安装应用程序的依赖项:

     nvm use 0.10.36 npm install --production 
  5. 然后,您可以使用scp或其他软件轻松下载node_modules。

和Robert的回答一样,当我不得不在不同的操作系统上使用我的MAC时,我使用虚拟化软件(如Oracle的免费虚拟化程序VirtualBox)在我的Mac上获得一个Linux,这对我没有任何代价。 或者注册一个新的AWS账户,你可以免费获得一年的微型账户。 使用它来获得你的Linux机器,做你需要的任何东西。

AWS有一个页面描述如何处理本地NPM模块: https : //aws.amazon.com/blogs/compute/nodejs-packages-in-lambda/