为 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.js
和 onDelete.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。
注意:阅读所有其他帖子后,我发现还有其他方法可以将函数组织到不同的文件中。我制作了这个脚本来解决我的问题,并且我现在正在我的一个项目中使用它。分享给大家,觉得其他的技术是不是太复杂了,大家可以试试这个。
为 Firebase 组织所有 Cloud Functions 的最佳实践是什么?
我从 sample GitHub repository 中看到所有函数都位于一个 index.js
文件中。
我想对于更大的项目,有更好的方法来组织不同 files/directory 中的 Cloud Functions for Firebase。
您可以在 index.js 文件中使用类似 export { functionName } from './file'
的内容。
// 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.js
和 onDelete.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。
注意:阅读所有其他帖子后,我发现还有其他方法可以将函数组织到不同的文件中。我制作了这个脚本来解决我的问题,并且我现在正在我的一个项目中使用它。分享给大家,觉得其他的技术是不是太复杂了,大家可以试试这个。