无服务器NodeJS /本机node_modules

我遇到了使用无服务器框架在AWS Lambda中加载节点模块的问题。 我的一个节点包使用本机库,所以我使用EC2来创buildnode_module文件夹,然后将它们复制到我的无服务器项目。 一切正常,如果我手动压缩项目并上传到AWS Lambda,但如果我使用serverless deploy没有指定的工件,我得到关于该模块的错误(特别是: ELF file's phentsize not the expected size关于一个.node文件)

我已经尝试添加excludeDevDependencies: false ,这使得部署更大,但仍然给我的错误。 目前,只有在我压缩项目文件夹的内容并将该文件指定为要上载的工件时才有效。 有没有一种不同的方式来获得具有本地绑定节点模块部署无服务器?

更新:在closures开发依赖项的排除之后,使用serverless package并检查serverless package扩展的zip文件创build,我发现.o和.a文件的文件大小在打包版本中与原始文件大小不同。 这是正常的吗?

在这里输入图像描述

我遇到了这个问题,并做了一些挖掘。 事实certificate,无服务器的v1.21.0打破了二进制文件的打包。

https://forum.serverless.com/t/serverless-1-21-0-breaks-sharp-library/2606

https://github.com/serverless/serverless/issues/4182

build议的修复方法是升级到v1.21.1 。

由于Lambda在Linux容器上运行,因此应该从Linux机器运行serverless deploy

这样,您的本地模块将被编译为您的目标架构是Linux。

要检查serverless创build的部署包,可以使用sls packagesls deploy --noDeploy (对于旧版本),并检查它创build的.serverless目录。 你会在这里看到一个zip文件,提取它的内容,并从那里testing代码。

如果这个zip文件的内容不是你所期望的(与手动复制它们不一样),那么你的文件结构和/或serverless.yml文件可能有问题。