17

Jak najlepiej uporządkować wszystkie nasze funkcje chmury dla Firebase?Porządkowanie funkcji chmurowych dla Firebase

Widzę od sample GitHub repository, że wszystkie funkcje znajdują się w jednym pliku index.js.

Dla większego projektu uważam, że istnieje lepsze podejście do organizowania Funkcji w chmurze dla Firebase w różnych plikach/katalogu.

+3

Jest to kwestia opinii i niezbyt dobrze nadaje się do przepełnienia stosu. Jednak powinieneś wiedzieć, że możesz użyć funkcji require(), aby pobrać kod z innych plików do pliku index.js. Potem organizacja jest tym, czym chcesz. –

+0

Dziękuję @DougStevenson, ta odpowiedź na moje pytanie. –

+1

Zobacz mój przykład tutaj: http://stackoverflow.com/questions/42726310/how-to-test-firebase-functions-locally-on-pc/42729988#42729988 To z nieco przestarzałej wersji Cloud Functions, ale koncepcje nadal działają tak samo. –

Odpowiedz

4

organizuję moje obsługi zdarzeń przez dostawcę i zasobów w folderze o nazwie triggers. Na przykład. gdzie auth jest dostawcą i user jest zasobem; folder functions/triggers/auth/user zawiera onCreate.js i , który wita i odpowiednio odbiera użytkownika.

+--/auth 
| +--/user 
|  +--/onCreate.js 
|  +--/onDelete.js 
+--/database 
+--/storage 

Można eksportować konkretnej spust za pomocą funkcji require:

exports.onCreateAuthUser = require('./triggers/auth/user/onCreate');  
exports.onDeleteAuthUser = require('./triggers/auth/user/onDelete'); 

poszedłem o krok dalej i stworzył skrypt, który automatycznie eksportuje funkcje dla mnie. Zmieniam rozszerzenie plików na f.js i przeszukuję rekursywnie katalog wyzwalaczy. Dla każdego odnalezionego pliku nazwa funkcji jest spreparowana przez podział katalogu i ścieżki pliku.

Ta struktura została zainspirowana przeglądem wnętrz pakietu NPM firebase-functions.

0

Możesz użyć czegoś takiego jak export { functionName } from './file' w pliku 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); 
});