5

我在各自的文件夹中有 3 个单独的函数。它们都使用 Twilio 客户端和 Apollo 客户端分别处理 SMS 和 GraphQL 服务器。

与其在每个文件中使用所有代码来实例化每个客户端(从环境中获取密钥等),不如将它放在某个地方并需要它?

我尝试将代码放入顶级函数/文件夹中的 .js 文件中,并在函数代码中要求它,如下所示,这在本地工作正常,但在实时环境中调用函数时netlify dev出错。Module not found '../twilioClient'

/functions
  apolloClient.js
  twilioClient.js
  package.json - specifying deps used by above files
  /auth
    auth.js - require('../apolloClient')
    ...
  /trails
    trails.js - require('../twilioClient') etc.
    ...
4

3 回答 3

2

我用这种方法取得了成功。

简短的回答

在您的函数文件夹中创建一个 utils 文件,并在您的函数文件中使用它。

长答案

我的netlify.toml文件如下所示:

[build] 
    functions = "./functions"

functions文件夹:

/functions
 function-1.js
 function-2.js
 utils.js

并且utils.js

exports.helloWorld = () => {
    console.log('hello world')
}

并且function-1.js

const {helloWorld} = require('./utils')

exports.handler = async (event) => {
  helloWorld()
}

测试它

运行netlify dev或部署它。您的 Functions 日志或终端应显示“hello world”。

我的 netlify 站点从 GitHub 部署。

于 2021-07-14T00:15:30.187 回答
2

我确实在将共享模块放入本地 npm 包中取得了一些成功(本地和实时):

/functions
  /utils
    package.json
    index.js
  /src
    /auth
      auth.js
    /trails
      trails.js
  package.json

导出所有常用模块,functions/utils/index.js设置属性"main": "index.js"functions/utils/package.json

functions/package.json安装模块时:

{
  "dependencies": {
    ...
    "utils": "file:utils"
  }
}

并将其导入您的函数中(in functions/src/auth/auth.js):import { apolloClient, twilioClient } from "utils"

请查看此存储库以供参考。

于 2020-04-30T10:42:57.467 回答
1

在我有机会尝试@nomadoda 的答案之前发布我的临时解决方案以防万一。

我的函数文件夹看起来像这样

/functions
  /utils
    apolloClient.js
    twilioClient.js
  /receive-sms
  /auth
  /stripe
  /scripts

其中 auth、scripts、receive-sms 和 stripe 是我的 lambda 函数。

"prebuild": "sh scripts/prebuild.sh"的根目录package.json如下所示:

cp -rf functions/utils functions/receive-sms
cp -rf functions/utils functions/auth
cp -rf functions/utils functions/scripts
cp -rf functions/utils functions/stripe

这也是我 cd 进入每个 lambda 函数文件夹并运行yarn以安装它们的依赖项的地方。

然后在我的函数文件夹中,我可以通过简单地从本地/utils文件夹导入来使用 utils 代码,即const apolloClient = require('./utils/apolloClient');

我还 gitignore 复制的/utils文件夹,因此 git 只跟踪 utils 的主版本。

正如我所说,它不太理想,但确实有效,尽管我希望上面的答案对我有用。

于 2020-05-30T08:26:54.053 回答