为Firebase组织所有Cloud功能的最佳做法是什么?
我从sample GitHub repository看到所有功能都存在于一个index.js
文件中。
我想更大的项目是有更好的方法在不同的文件/目录中组织Firebase的Cloud Functions。
答案 0 :(得分:6)
我按照提供程序和资源在名为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包的内部结构。
答案 1 :(得分:0)
您可以在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);
});
答案 2 :(得分:0)
这是一个很好的问题,也是我最近一直在寻找的东西。我从塔里克·胡伯(Tarik Huber)找到了一个伟大的策略:Organizing your Firebase Cloud Functions。这是他对自己的想法以及该领域其他一些贡献者的看法。
他根据用途和类型(即触发器,Http等)将其功能组织到文件夹结构中。 index.js代码以非常结构化和简洁的方式迭代结构并导入函数。它不仅允许开发人员以易于理解的结构简单地添加新功能,而且无需手动操作index.js文件,它也可以根据结构在Firebase中部署功能名称。
一定要检查一下。
答案 3 :(得分:0)
我创建了一个脚本,用于将Firebase函数文件夹根目录中名为js的文件夹中存在的所有JavaScript文件复制到index.js。
基本上,该脚本只是自动执行文件的复制。合并所有必需的文件后,便可以照常部署功能了。
您可以找到脚本here。
注意:阅读所有其他文章,我发现还有其他方法可以将功能组织到不同的文件中。我制作了此脚本来解决我的问题,并且像现在一样,在我的一个项目中使用了它。与大家分享,考虑其他技术似乎太复杂了,您可以尝试一下。