繁体   English   中英

无服务器NodeJS / Native node_modules

[英]Serverless NodeJS / Native node_modules

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

我已经尝试添加excludeDevDependencies: false这使部署更大但仍然给我错误。 目前,它仅在我压缩项目文件夹的内容并将该文件指定为要上载的工件时才有效。 是否有不同的方法可以使用本机绑定的节点模块与无服务器一起部署?

更新:关闭dev依赖项的排除,使用serverless package并检查无服务器创建的扩展zip文件后,我发现打包版本中.o和.a文件的文件大小与原始文件大小不同。 这是正常的吗?

在此输入图像描述

我遇到了这个问题并做了一些挖掘。 事实证明,v1.21.0无服务器破坏了二进制包装。

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

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

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

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

这样,您的本机模块将针对您的目标架构(Linux)进行编译。

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

如果此zip的内容不符合您的预期(与您手动复制时的内容不同),那么您的文件结构和/或serverless.yml

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM