Организация облачных функций для Firebase
Как лучше всего организовать все наши облачные функции для Firebase?
Из примера репозитория GitHub я вижу, что все функции находятся в одном index.js
файл.
Я предполагаю, что для более крупного проекта есть лучший подход для организации облачных функций для Firebase в разных файлах / директориях.
2 ответа
Я организую свои обработчики событий по поставщикам и ресурсам в папке с именем 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.
Это отличный вопрос, и я недавно искал его. Я нашел отличную стратегию от Тарика Хубера: организация ваших облачных функций Firebase. Это его собственные мысли и несколько других авторов в этой области.
Он организует свои функции в зависимости от их использования и типа (например, триггер, HTTP и т. Д.) В структуру папок. Код index.js выполняет итерацию по структуре и импортирует функции очень структурированным и кратким образом. Он не только позволяет разработчикам просто добавлять новые функции в хорошо понятную структуру, но им не нужно вручную манипулировать файлом index.js, а также развертывает имена функций в Firebase в соответствии со структурой.
Обязательно зацените.
Вы могли бы использовать что-то вроде export { functionName } from './file'
в вашем файле 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);
});
Я создал сценарий для копирования всех файлов javascript, находящихся в папке с именем js, которая находится в корневом каталоге папки функций firebase, в index.js.
По сути, сценарий просто автоматизирует копирование файла. После объединения всех необходимых файлов можно развернуть функции как обычно.
Вы можете найти сценарий здесь.
Примечание: прочитав все остальные сообщения, я обнаружил, что есть другие способы организовать функции в разных файлах. Я сделал этот сценарий для решения своей проблемы и использую его в одном из своих проектов, как сейчас. Делюсь с вами, ребята, думая, что если другие техники кажутся слишком сложными, вы можете попробовать это.