我只想使用我的自定义构建二进制模块,该模块只有一个文件 index.node 。它位于 src / modules / my_module 目录中。当我尝试在lambda函数中使用它时
const myModule = require('src/modules/my_module')
它会引发错误
失败:找不到模块
我什至尝试过这样
const myModule = require('src/modules/my_module/index.node')
然后抛出
模块解析失败
但是如果我在node.js中运行相同的代码(没有在aws lambda中部署),它就可以工作。如何在AWS Lambda函数中正确加载node.js二进制模块文件?
@AironBrynchke
只需重复以下步骤:
mkdir myprj
cd myprj
serverless create --template aws-nodejs-typescript && npm install
cp /folder/with/your/index.node ./index.node
nano handler.ts
然后替换为该内容
import { APIGatewayEvent, Callback, Context, Handler } from 'aws-lambda';
export const hello: Handler = (event: APIGatewayEvent, context: Context, cb: Callback) => {
const myModule = require('./index.node');
const response = {
statusCode: 200,
body: JSON.stringify({
message: 'Go Serverless Webpack (Typescript) v1.0! Your function executed successfully!',
input: event,
}),
};
cb(null, response);
}
然后是最后一步
serverless deploy -v
您将会看到
./ index.node 1:0中的错误模块解析失败:意外字符 ''(1:0)您可能需要适当的加载程序来处理此文件类型。 (此二进制文件省略了源代码)@ ./handler.ts 2:21-44 @ 多个./source-map-install.js ./handler.ts
我还尝试为webpack安装节点加载器
npm install node-loader --save-dev
然后添加webpack.config.js
module: {
rules: [
// all files with a `.ts` or `.tsx` extension will be handled by `ts-loader`
{ test: /\.tsx?$/, loader: 'ts-loader' },
{ use: 'node-loader'}
],
},
毕竟我得到了这个错误
... / myprj / handler.ts(1,21)中的错误 TS2339:类型“ Process”上不存在属性“ dlopen”。