如何加载aws lambda中的lib文件夹?

在无服务器,我有以下文件夹结构

/component_a/function_1/function_1.js /component_a/lib/util.js 

当我尝试从function_1.js使用加载util.js

 u = require('../lib/util.js') 

它从无服务器CLI“无服务器function运行function__1”工作。 但是在lambda / api-gateway中找不到lib / util.js。

这是错误“错误:无法find模块”../lib/util'“

我该如何解决?

这是如何解决。 在component_a / s-function.json中replace

 "handler": "handler.handler", 

 "handler": "component_a/handler.handler", 

在function_1.js中调用util.js就好

 u = require('../lib/util') 

从无服务器文档

处理程序属性使您能够在您的函数之间共享代码。 默认情况下,处理程序属性是handler.handler,这意味着它只是相对于函数文件夹,所以只有函数文件夹将被部署到Lambda。

但是,如果要包含函数的父子文件夹,则应该将处理程序更改为如下所示: functionName / handler.handler如您所见,处理程序的path现在包含函数文件夹,这意味着path是现在相对于父子文件夹,所以在这种情况下,父子文件夹将与您的function一起部署。 所以,如果你的函数需要在父子文件夹中有一个lib文件夹,它将被部署到你的函数中。

这也让你能够处理npm的依赖关系,无论你喜欢。 如果在父子文件夹中有一个package.json和node_modules,它将包含在已部署的lambda中。 因此,处理程序path中包含的父文件夹越多,文件树中的文件夹越高。