Mai mult
Cum pot structura Nor Functii de Baza pentru a implementa mai multe functii din mai multe fișiere?
Aș dori pentru a crea Cloud multiple Funcții pentru Firebase și implementați-le pe toate în același timp la un proiect. Am dori, de asemenea, pentru a separa fiecare funcție într-un fișier separat. În prezent, pot crea mai multe funcții, dacă le-am pus amândoi în index.js cum ar fi:
exports.foo = functions.database.ref('/foo').onWrite(event => {
...
});
exports.bar = functions.database.ref('/bar').onWrite(event => {
...
});
Cu toate acestea, aș dori să pun foo bar și în fișiere separate. Am incercat asa:
/functions
|--index.js (blank)
|--foo.js
|--bar.js
|--package.json
în cazul în care foo.js este
exports.foo = functions.database.ref('/foo').onWrite(event => {
...
});
și bar.js este
exports.bar = functions.database.ref('/bar').onWrite(event => {
...
});
Există o modalitate de a realiza acest lucru fără a pune toate funcțiile în index.js?
135
14
Ah, Cloud Funcții pentru Firebase sarcina nod module, în mod normal, astfel încât aceasta funcționează
structura:
index.js:
foo.js:
bar.js:
Răspunsul de @jasonsirota a fost de foarte mare ajutor. Dar poate fi util pentru a vedea mai detaliată cod, mai ales în cazul HTTP declanșat funcții.
Folosind aceeași structură ca în @jasonsirota's a răspunde, să spunem că doriți să aveți două HTTP funcții de declanșare în două fișiere diferite:
structura de directoare:
index.js:
foo.js:
bar.js:
Update: Acest doc ar trebui ajuta, răspunsul meu este mai vechi decât acest doc.
Aici este modul în care eu personal făcut-o cu mașina de scris:
Permiteți-mi să încep prin a-ți dau două avertismente pentru a face acest lucru:
Pentru punctul 2 am'm nu sunt sigur de ce. Secundo ar trebui să-mi respecte configurația index, principal și db exact (cel puțin să-l încercați).
index.ts : se ocupa cu exportul. Găsesc că este mai curat pentru a lăsa index.ts ocupă cu exporturile.
principal.ts: Oferte cu inițializare.
db.ts: doar reexporting db deci numele său este mai scurt decât date()`
http-funcții.ts
Cu Nodul 8 ESTE acum disponibil cu Nor/Firebase Funcții puteți face următoarele cu răspândirea operatori:
/pachet.json
/index.js
/lib/foo.js
În cazul în care cu Babel/Curge ar arata astfel:
Director Layout
src/index.js
- export Principal(s)src/db.js
- Cloud SQL Client pentru Postgressrc/store.js
- Firebase Firestore Client`src/someFuncA.js Funcție de Un
`src/someFuncB.js Funcție de B
.babelrc
firebase.json
# # pachet.json`
Pentru a fi păstrat simplu (dar functioneaza), eu personal am structurat un astfel de cod.
Aspect
foo.ts
bar.ts
db.ts
index.ts
Lucrări pentru directoarele de orice niveluri imbricate. Doar urmați modelul în interiorul directoare de asemenea.
Pentru a fi păstrat simplu (dar functioneaza), eu personal am structurat un astfel de cod.
Aspect
foo.ts
bar.ts
index.ts
Lucrări pentru directoarele de orice niveluri imbricate. Doar urmați modelul în interiorul directoare de asemenea.
Acest format permite puncte de intrare pentru a găsi funcția suplimentare de fișiere, și de export fiecare funcție în cadrul fiecărui fișier, în mod automat.
Principalul Punct De Intrare Script
Găsește toate .js fișiere în interiorul funcțiilor dosar, iar exporturile fiecare funcție exportate din fiecare fișier.
Exemplu de Export de Multe Funcții dintr-Un Fișier
http accesibile finale sunt numit în mod corespunzător
Un dosar
Dacă aveți doar câteva fișiere suplimentare (de exemplu, doar unul), puteți folosi:
bigcodenerd.org contur's un simplu arhitectura model în scopul de a avea metode separate în diferite fișiere și exportate în o linie în index.js fișier.
Arhitectura pentru proiect în acest eșantion este următoarea:
projectDirectory
index.js
podcast.js
Același model ar putea fi utilizate pentru
removeProfile
metoda în profile fișier.Există o destul de bună modalitate de a organiza toate dvs. de cloud funcțiile pe termen lung. Am făcut asta recent și este de lucru impecabil.
Ceea ce am făcut a fost să organizeze fiecare nor funcție în foldere separate pe baza lor de a declanșa efectul. Fiecare nor funcția de nume se termină cu
*.f.js
. De exemplu, dacă ați avut onCreate " și "onUpdatedeclanseaza pe utilizator/{id}/document/{documentId}
apoi, creați două fișiere onCreate.f.js" și "onUpdate.f.jsin directorul
funcții/utilizator/document/și funcția dumneavoastră va fi numit
userDocumentOnCreate" și " userDocumentOnUpdate` respectiv. (1)Aici este un eșantion directorul avem:
Funcție De Probă
Index.js
(1): puteți folosi orice nume doriți. Pentru mine, onCreate.f.js, onUpdate.f.js etc. par mai relevante pentru tipul de declanșare sunt.
Deci am acest proiect, care are funcții de fundal și http funcții. Am, de asemenea, teste pentru unitate de testare. CI/CD va face viața mult mai ușoară atunci când implementarea cloud funcții
Structura de foldere
Notă: `utils/ dosarul este pentru cota de cod între funcții
functions/index.js
Aici puteți importa doar toate funcțiile de care aveți nevoie și să le declare. Nu trebuie sa ai logica aici. Ea face curat în opinia mea. `javascript necesită('modulul-alias/register'); const funcții = necesită('firebase-funcții');
const onCreate = necesită('@fundal/onCreate'); const onDelete = necesită('@fundal/onDelete'); const onUpdate = necesită('@fundal/onUpdate');
const tururi = necesită('@http/tours'); const dungă = necesită('@http/stripe');
const docPath = 'excursii/{tourId}';
module.exporturile.onCreate = funcții.firestore.document(docPath).onCreate(onCreate); module.exporturile.onDelete = funcții.firestore.document(docPath).onDelete(onDelete); module.exporturile.onUpdate = funcții.firestore.document(docPath).onUpdate(onUpdate);
module.exporturile.excursii = funcții.https.onRequest(excursii); module.exporturile.dungă = funcții.https.onRequest(bandă); ``
CI/CD
Cum despre a avea continuu de integrare și implementare de fiecare dată când apăsați modificările la repo? Puteți să-l avea, cu ajutorul google google cloud construi. L's gratuit până la un punct :) Verifica acest lucru link.
./cloudbuild.yaml ``yaml pașii de mai jos:
substituții: _FIREBASE_TOKEN: nimic ``
Eu folosesc un vanilla JS bootloader pentru a auto-includ toate funcțiile pe care vreau să o utilizați.
index.js (bootloader)
Acest exemplu index.js fișier de auto-include directoare în rădăcină. Acesta ar putea fi extins pentru a mers pe jos directoare, onoare .gitignore, etc. Acest lucru a fost suficient pentru mine.
Cu indicele de fișier în loc, adăugarea de noi funcții este banal.
/test/testA.js
/test/testB.js
`npm rula servi randamente:
Acest flux de lucru este destul de mult doar "scrie și rula", fără a fi nevoie de a modifica index.js fișier de fiecare dată când o nouă funcție/fișier este adăugat/modificat/eliminat.
Am petrecut o mulțime de timp în căutarea pentru același lucru, și nu este ceea ce cred că este cel mai bun mod de a realiza (I'm, folosind firebase@7.3.0):
https://codeburst.io/organizing-your-firebase-cloud-functions-67dc17b3b0da
Nu sudoare ;)
Aici's un răspuns simplu daca're crearea nor funcții cu mașina de scris.
Aproape toate import regulat în partea de sus a exporta toate funcțiile din
foo.ts
.export * din './foo';`