Организовать облачные функции для Firebase

Какова наилучшая практика для организации всех наших Облачных функций для Firebase?

Я вижу из образец репозитория GitHub, что все функции находятся в одном файле index.js.

Я предполагаю, что для более крупного проекта существует лучший подход к организации облачных функций для Firebase в разных файлах/каталогах.

Ответы

Ответ 1

Я организую обработчики событий поставщиком и ресурсом в папке с именем 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');

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

Эта структура была вдохновлена ​​проверкой внутренних компонентов пакета firebase-functions npm.

Ответ 2

Вы можете использовать что-то вроде 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);
});