为 Firebase 组织云函数

Organize Cloud Functions for Firebase

为 Firebase 组织所有 Cloud Functions 的最佳实践是什么?

我从 sample GitHub repository 中看到所有函数都位于一个 index.js 文件中。

我想对于更大的项目,有更好的方法来组织不同 files/directory 中的 Cloud Functions for Firebase。

您可以在 index.js 文件中使用类似 export { functionName } from './file' 的内容。

/functions/index.js
// This is the main entry point for the app written in ES that is compatible with node lts
import * as functions from 'firebase-functions';

export { sendWelcomeEmail } from './userEmails';

exports.helloWorld = functions.https.onRequest((request, response) => {
  let helloMsg = `Hello!`;
  response.send(helloMsg);
});

我在名为 triggers 的文件夹中按提供者和资源组织我的事件处理程序。例如。其中 auth 是提供者,user 是资源;文件夹 functions/triggers/auth/user 包含 onCreate.jsonDelete.js,分别欢迎和清理用户。

+--/auth
|  +--/user
|     +--/onCreate.js
|     +--/onDelete.js
+--/database
+--/storage

您可以使用 require 函数导出特定触发器:

exports.onCreateAuthUser = require('./triggers/auth/user/onCreate');    
exports.onDeleteAuthUser = require('./triggers/auth/user/onDelete');

我更进一步,创建了一个自动为我导出函数的脚本。我将文件的扩展名更改为 f.js 并递归搜索触发器目录。对于找到的每个文件,函数名称是通过分解目录和文件路径来编造的。

这个结构的灵感来自检查 firebase-functions npm 包的内部结构。

这是一个很好的问题,也是我最近一直在寻找的东西。我从 Tarik Huber 那里找到了这个很棒的策略:Organizing your Firebase Cloud Functions。这是他对自己的想法和该领域的其他一些贡献者的看法。

他根据函数的用途和类型(即触发器、Http 等)将函数组织到一个文件夹结构中。 index.js 代码遍历结构并以非常结构化和简洁的方式导入函数。它不仅允许开发人员简单地在易于理解的结构中添加新功能,而且他们不必手动操作 index.js 文件,而且它还会根据结构在 Firebase 中部署功能名称。

一定要看看。

我创建了一个脚本,用于将 firebase 函数文件夹根目录中名为 js 的文件夹中的所有 javascript 文件复制到 index.js。

基本上,脚本只是自动复制文件,合并所有需要的文件后,就可以像往常一样部署功能了。

您可以找到脚本 here

注意:阅读所有其他帖子后,我发现还有其他方法可以将函数组织到不同的文件中。我制作了这个脚本来解决我的问题,并且我现在正在我的一个项目中使用它。分享给大家,觉得其他的技术是不是太复杂了,大家可以试试这个。

Link: https://github.com/UnresolvedCold/firebase-merge