3

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

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

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

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

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

这是错误“错误:找不到模块'../lib/util'”

我该如何解决?

4

1 回答 1

3

这是解决方法。在 component_a/s-function.json 替换

"handler": "handler.handler",

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

在 function_1.js 中调用 util.js 之类的

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

来自无服务器文档

handler 属性使您能够在函数之间共享代码。默认情况下,handler 属性是 handler.handler,这意味着它只与函数文件夹相关,因此只有函数文件夹会部署到 Lambda。

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

这也使您能够随心所欲地处理 npm 依赖项。如果您在该父子文件夹中有 package.json 和 node_modules,它将包含在已部署的 lambda 中。因此,您在处理程序路径中包含的父文件夹越多,您在文件树中的位置就越高。

于 2016-06-07T14:35:20.920 回答