【发布时间】:2020-12-12 16:13:49
【问题描述】:
问题
在研究了 Firebase 文档、视频、StackOverflow、大量文章之后……以“简单”的方式组织多个(大量)云功能并不明显。特别是,由于 Firebase 官方文档没有提供清晰的愿景/建议。实际上,真正的问题是缺乏关于如何从一开始就设置具有大量功能的 Firebase 项目的清晰文档。
考虑到以下几点,我试图找到一种简单的方法:
- 基于 Firebase 文档(每个 Firebase 新用户都在阅读)
- Firebase CLI 部署的一个 index.js 要求
- 在 TypeScript 上使用纯 JavaScript,不要使用太多语法魔法糖
- 对 index.js 中包含/引用的文件/函数的透明控制
- 开发大量功能,但不要直接导出 index.js 中的所有功能(一种部署控制层)
- 没有太多的异步/等待导入像这个例子https://medium.com/firebase-developers/organize-cloud-functions-for-max-cold-start-performance-and-readability-with-typescript-and-9261ee8450f0
- 不依赖于像这个很好的例子中的命名约定https://codeburst.io/organizing-your-firebase-cloud-functions-67dc17b3b0da
- 在函数数量方面的可扩展性
- 从初始设置(初学者使用 Firebase 文档)到高级,如何迁移结构?
- 最大限度地减少添加/部署越来越多云功能的工作量
- 性能:延迟加载/初始化管理 SDK + 确保它仅被初始化一次
- 最小化服务器实例冷启动时间
- 易于解释、易于使用、易于维护(当然有点主观)
解决方案?
从手动部署云功能到使用 JavaScript 进行简单的初始 CLI 设置,我尝试了以下文件结构并取得了一些成功:
[project]/
- functions/
- index.js
- src/
- functionA.js
- functionB.js
- ...
...
index.js
结构基于官方文档:https://firebase.google.com/docs/functions/organize-functions
const functions = require('firebase-functions');
const functionA = require('./src/FunctionA');
exports.FunctionA = functionA.FunctionA;
const functionB = require('./src/FunctionB');
exports.FunctionB = functionA.FunctionB;
FunctionA.js
使用https://gist.github.com/saintplay/3f965e0aea933a1129cc2c9a823e74d7#file-index-js
const functions = require('firebase-functions');
const admin = require('firebase-admin');
// Prevent firebase from initializing twice
try { admin.initializeApp() } catch (e) {console.log(e);}
exports.FunctionA = ...
FunctionB.js
const functions = require('firebase-functions');
const admin = require('firebase-admin');
// Prevent firebase from initializing twice
try { admin.initializeApp() } catch (e) {console.log(e);}
exports.FunctionB = ...
问题
- 这是一个切实可行的解决方案吗?
- 与异步/等待导入相比,是否存在任何性能问题?
-
admin.initializeApp()周围的 try-catch 块是干净的实现吗? - Typescript 等效解决方案是什么?
- 冷启动时间:通过 Firebase CLI 部署时,我注意到在 Google Cloud Console 的“Cloud Functions”部分中,所有云函数实例都包含所有其他函数的源代码
- 在云控制台中手动创建函数时,每个函数只有自己的一段代码要部署/初始化/执行
- 有什么优化建议吗? (例如 index.js 的可维护性)
【问题讨论】:
-
如果您有 lynda.com 帐户,有一个关于 Firebase 函数的相对较新的优秀课程,其中包含如何设置多个函数的演练。
-
我刚刚分享了我的 POV in this post,以防您想查看。
标签: javascript firebase google-cloud-functions