如何在AWS Lambda中使用单个.node二进制模块文件

时间:2018-09-25 09:36:36

标签: node.js amazon-web-services aws-lambda serverless node.js-addon

我只想使用我的自定义构建二进制模块,该模块只有一个文件 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”。

0 个答案:

没有答案