我刚刚向AWS Lambda上传了一个zip,其中包含“ref”(https://www.npmjs.com/package/ref),这是验证iOS Game Center身份验证令牌(How to authenticate Game Center User from 3rd party node.js server)所必需的。
不幸的是,调用它会导致“无效的ELF标头”错误,
{
"errorMessage": "/var/task/node_modules/ref/build/Release/binding.node: invalid ELF header",
"errorType": "Error",
"stackTrace": [
"Module.load (module.js:356:32)",
"Function.Module._load (module.js:312:12)",
"Module.require (module.js:364:17)",
"require (module.js:380:17)",
"bindings (/var/task/node_modules/ref/node_modules/bindings/bindings.js:76:44)",
"Object.<anonymous> (/var/task/node_modules/ref/lib/ref.js:5:47)",
"Module._compile (module.js:456:26)",
"Object.Module._extensions..js (module.js:474:10)",
"Module.load (module.js:356:32)",
"Function.Module._load (module.js:312:12)"
]
}
这是在运行Yosemite的64位Macbook Pro上开发的,在本地运行代码没有问题。谷歌搜索“无效的ELF标题”几乎没有知道相关的结果,我真的不知道从哪里去。我是否可以在node.js区域更好地询问这个问题,或者这是相关领域,因为它可能是平台的问题?
答案 0 :(得分:0)
这并不完全适用于您的问题,但是如果有人在使用AWS Elastic Beanstalk时偶然发现了该问题,则可能是由于将.ebignore
目录以及其他所有内容一起上传的结果,因此您需要强制执行忽略文件。
node_modules/
buildTypes {
release {
// Enables code shrinking, obfuscation, and optimization for only
// your project's release build type.
minifyEnabled true
// Includes the default ProGuard rules files that are packaged with
// the Android Gradle plugin. To learn more, go to the section about
// R8 configuration files.
proguardFiles getDefaultProguardFile(
'proguard-android-optimize.txt'),
'proguard-rules.pro'
}
}
答案 1 :(得分:0)
这是我在 Reddit 上找到的您问题的答案:
[由 JeffGebhart 解决] https://hub.docker.com/r/lambci/lambda/
然后通过 SSH 连接到运行 Amazon Linux 2 的 EC2 实例。
npm
和 nvm
安装 docker
并运行docker pull lambci/lambda
mkdir LambdaFunction
npm init
并初始化一切。
docker run --rm -v "$PWD":/var/task lambci/lambda:build-nodejs12.x
npm install <packages you need>
它将在 node_modules
中构建证明者原生模块。现在,您可以将所有文件提取到您的 PC 或 AWS。