Организация облачных функций для 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.

/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);
});

Я создал сценарий для копирования всех файлов javascript, находящихся в папке с именем js, которая находится в корневом каталоге папки функций firebase, в index.js.

По сути, сценарий просто автоматизирует копирование файла. После объединения всех необходимых файлов можно развернуть функции как обычно.

Вы можете найти сценарий здесь.

Примечание: прочитав все остальные сообщения, я обнаружил, что есть другие способы организовать функции в разных файлах. Я сделал этот сценарий для решения своей проблемы и использую его в одном из своих проектов, как сейчас. Делюсь с вами, ребята, думая, что если другие техники кажутся слишком сложными, вы можете попробовать это.

Ссылка: https://github.com/UnresolvedCold/firebase-merge