无法从aws-lambda解析“ nodejs /”目录下的自定义依赖项

时间:2019-09-28 09:11:02

标签: node.js amazon-web-services ecmascript-6 aws-lambda aws-lambda-layers

我正在尝试从lambda层导入自定义依赖项,但无法正常工作。

环境:nodejs8.10

我有一个包含以下目录结构的层:

mylayer.zip-
           |-nodejs-
                   |-util.js 

在这里,util.js具有以下代码:

module.exports = function SomeFunction() {
  console.log('Told you This Doesn't work');
}

,并且在myLambda.js中,我尝试使用以下代码调用SomeFunction

const someFunction = require('/opt/nodejs/util')
exports.handler = async (event) => {

    someFunction();
    const response = {
        statusCode: 200,
        body: JSON.stringify('Hello from Lambda!'),
    };
    return response;
};

但是,我收到此错误:

{
  "errorMessage": "Cannot find module '/opt/nodejs/util'",
  "errorType": "Error",
  "stackTrace": [
    "Function.Module._load (module.js:474:25)",
    "Module.require (module.js:596:17)",
    "require (internal/module.js:11:18)",
    "Object.<anonymous> (/var/task/index.js:1:75)",
    "Module._compile (module.js:652:30)",
    "Object.Module._extensions..js (module.js:663:10)",
    "Module.load (module.js:565:32)",
    "tryModuleLoad (module.js:505:12)",
    "Function.Module._load (module.js:497:3)"
  ]
}

谢谢。

2 个答案:

答案 0 :(得分:0)

在您列出的目录结构中看不到“ opt”;也许您只需要'/ nodejs / util'作为路径?

此外,我认为您需要在模块中引用该函数:

const util = require('./nodejs/util')
exports.handler = async (event) => {

    await util.someFunction();
    const response = {
        statusCode: 200,
        body: JSON.stringify('Hello from Lambda!'),
    };
    return response;
};

答案 1 :(得分:0)

为什么不将您的自定义依赖项放在node_modules文件夹中?

mylayer.zip-
           |-nodejs-
                   |-node_modules-
                                 |-utils-
                                        |-utils.js
                                        |-somthing.js

然后您可以在utils文件夹中要求所有内容:

const someFunction = require('utils/utils.js')
const someOtherFunction = require('utils/something.js')