8

我有一个节点服务器和多个控制器,它们在该目录中执行数据库操作和帮助程序(例如电子邮件)。

我想在我的函数中使用该目录中的源代码。假设以下目录结构:

src/
  server/
    /app/controllers/email_helper.js
  fns/
    send-confirm/

email_helper在 send-confirm 函数中使用的最佳方法是什么?

我试过了:

  • 符号链接“服务器”目录
  • 将本地仓库添加到 send-confirm/package.json

以上都不起作用。

4

1 回答 1

8

原则上,您的 Cloud Functions 可以使用任何其他 Node.js 模块,就像任何标准 Node.js 服务器一样。但是,由于 Cloud Functions 需要在云中构建您的模块,它需要能够从云中找到这些依赖模块。这就是问题所在。

Cloud Functions 可以从以下任一位置加载模块:

  • 任何公共 npm 存储库。
  • 任何网络可见的 URL。
  • 为您生成的functions/目录中的任何firebase init位置,并上传到firebase deploy.

在您的情况下,从 的角度来看functions/package.json,该../server/目录不属于任何这些类别,因此 Cloud Functions 无法使用您的模块。不幸的是,firebase deploy它不遵循符号链接,这就是该解决方案不起作用的原因。

我看到两个可能的立即修复:

  • 将您的server/目录移动到functions/. 我意识到这不是最漂亮的目录布局,但它是黑客攻击时最简单的修复。然后,functions/package.json您可以对./server.
  • 在某处的 URL 后面公开您的代码。例如,您可以打包一个.tar并将其放在 Google Drive 或 Firebase Cloud Storage 上。或者,您可以使用公共 git 存储库。

firebase deploy将来,如果遵循符号链接,我会喜欢它。我已经在 Firebase 的内部错误跟踪器中提交了一个功能请求。

于 2017-03-16T22:45:45.530 回答