【发布时间】:2021-01-02 03:15:53
【问题描述】:
原始问题 - 见最后答案
我们已经使用 Firebase 函数 2 年多了,已经积累了超过 120 个 HTTP、可调用、触发和计划函数,所有这些函数都从单个 functions/index 调用并由单个 package.json 管理,可能像你们很多人。您可以想象,我们有一些 旧 依赖项,我们不愿更新,因为它需要经过、测试等大量代码。所以这让我开始思考,我我问你们中是否有人这样做过或者知道为什么这行不通...
查看 GCP 仪表板,每个功能都是一个独立的独立服务。但是如果你从那里下载代码,你最终会得到所有 120 多个函数、节点模块等的完整构建。所以如果我在我的单个 functions 目录上运行 npm deploy(如果配额不是问题) ,看起来像
- Firebase 工具在我的机器或 CI 工具上抓取我的单个构建
- 复制 120 多次,然后
- 将整个构建的完整副本推送到每个函数中
这让我开始思考 - 考虑到我不能并且不想构建我的整个项目并一次部署所有功能,我是否必须拥有它们全部在一个 functions 目录中,共享一个 package.json 和依赖项,并从单个 functions/index 导出?
有什么我不能有的理由吗,例如:
- functions
- functionSingleA (running on node 10)
- lib/index.js
- package.json (stripe 8.92 and joi)
- src/index.ts
- node_modules
- functionGroupB (running on node 12)
- lib/index.js
- package.json (stripe 8.129 and @hapi/joi)
- src/index.ts
- node_modules
我知道我失去了一次性部署的能力,但由于配额,我不再拥有这种奢侈。除此之外,还有什么理由这不起作用?毕竟,据我所知,Firebase 函数只是具有内置 Firebase 凭据的单个无服务器云函数。是我遗漏了什么,还是你这样做并且它工作正常(或破坏了一切)?
Google Firebase 团队的回答
Firebase 工程师通过支持确认这是绝对可行的,但也请查看我和 @samthecodingman 之间的讨论。您可以将您的功能分解为具有不同 package.json 文件和依赖项的完全独立的模块或组,并部署每个(单独或作为组)而不影响其他功能。
您失去的回报是使用firebase functions deploy 命令部署所有功能的能力(尽管@samthecodingman 提供了一个解决方案),并且您失去了在本地模拟功能的能力。我还没有解决方法。
【问题讨论】:
标签: firebase google-cloud-functions