Catch up on everything announced at Firebase Summit, and learn how Firebase can help you accelerate app development and run your app with confidence. Learn More

ארגן מספר פונקציות

קל לארגן דפים בעזרת אוספים אפשר לשמור ולסווג תוכן על סמך ההעדפות שלך.

כאשר אתה משלב פונקציות ענן בפרויקט שלך, הקוד שלך יכול להתרחב ולהכיל פונקציות עצמאיות רבות. ייתכן שיש לך יותר מדי פונקציות מכדי להתאים באופן סביר לקובץ בודד, או שצוותים שונים עשויים לפרוס קבוצות שונות של פונקציות, מה שיוצר סיכון שצוות אחד יחליף או ימחק בטעות פונקציות של צוות אחר. Cloud Functions מציע דרכים שונות לארגן את הקוד שלך כדי להקל על הניווט והתחזוקה של הפונקציות שלך.

ארגן פונקציות בבסיסי קוד

אתה יכול להשתמש במאפיין codebase של אובייקט תצורת הפונקציות ב- firebase.json כדי לנהל אוסף גדול של פונקציות על פני מספר מאגרים או חבילות משנה בתוך הגדרת monorepo של מאגר יחיד:

# firebase.json
"functions": {
  "codebase": "my-codebase"
  # NOTE: Codebase must be less than 63 characters and can contain only
  # lowercase letters, numeric characters, underscores, and dashes.
}

המאפיין codebase נתמך ב-Firebase CLI v10.7.1 ומעלה.

ניהול מספר מאגרים

המאפיין codebase יכול לעזור לפשט את הניהול של מאגרים מרובים. הבה נבחן מקרה שבו יש לך שני מאגרים שונים הפורסים פונקציות לאותו פרויקט Firebase:

$  tree .
├── repoA
│   ├── firebase.json
│   └── functions
│       ├── index.js
│       └── package.json
└── repoB
    ├── firebase.json
    └── functions
        ├── index.js
        └── package.json

ללא הערות בסיס קוד, ה-CLI של Firebase היה מבקש ממך למחוק פונקציות שהוגדרו במאגר האחר בזמן הפריסה:

$ (cd repoA && firebase deploy --only functions)
...
i  functions: preparing functions directory for uploading...
✔  functions: functions folder uploaded successfully
The following functions are found in your project but do not exist in your local source code:
        fn1FromRepoB
        fn2FromRepoB
        ...
? Would you like to proceed with deletion? Selecting no will continue the rest of the deployments. (y/N)

אתה יכול להימנע מבעיה זו על ידי הוספת הערת בסיס קוד ייחודית בקטע תצורת הפונקציות של firebase.json בכל מאגר פרויקטים:

# repoA/firebase.json
"functions": {
  "codebase": "repo-a"
}

# repoB/firebase.json
"functions": {
  "codebase": "repo-b"
}

עם הערת בסיס קוד, ה-CLI של Firebase כבר לא מבקש ממך למחוק פונקציות שהוגדרו מחוץ למאגר המיידי שלך:

$ (cd repoA && firebase deploy --only functions)
...
i  functions: preparing functions directory for uploading...
✔  functions: functions folder uploaded successfully
#  Gleefully ignores functions from repoB
i  functions: creating Node.js 16 function fnFromRepoA (us-central1)...
✔  Deploy Complete!

ניהול מספר חבילות מקור (monorepo)

המאפיין codebase יכול לעזור לפשט את הניהול של מספר חבילות מקור במאגר יחיד. הבה נבחן מקרה שבו יש לך ספריית פרויקטים של Firebase עם הגדרות פונקציות הפרוסות על פני מספר חבילות משנה:

$  tree .
├── firebase.json
├── teamA
│   ├── index.js
│   └── package.json
└── teamB
    ├── index.js
    └── package.json

הגדרה זו מתאימה למקרי השימוש הבאים:

  • יש לך הגדרת monorepo וצוותים שונים מנהלים את הגדרות הפונקציה שלהם בחבילה מבודדת.
  • יש לך פונקציה עם תלות חיצונית כבדה ואתחול ארוך טווח, ואתה רוצה לבודד את הפונקציה הזו מפונקציות אחרות, הרגישות ל-latency.

כדי לתמוך בהגדרת monrepo כזו, הגדר תצורות פונקציות מרובות ב- firebase.json :

"functions": [
  {
    "source": "teamA",
    "codebase": "team-a"
  },
  {
    "source": "teamB",
    "codebase": "team-b"
  },
]

עם תצורה זו, Firebase CLI פורס פונקציות מכל החבילות בפקודת פריסה אחת:

$ firebase deploy --only functions
i  deploying functions
i  functions: preparing codebase team-a for deployment
i  functions: preparing codebase team-b for deployment
i  functions: creating Node.js 16 function team-a:helloATeam(us-central1)...
i  functions: creating Node.js 16 function team-b:helloBTeam(us-central1)...
...

אתה יכול גם לפרוס בסיס קוד ספציפי:

$ firebase deploy --only functions:team-b
i  deploying functions
i  functions: preparing codebase team-b for deployment
i  functions: updating Node.js 16 function team-b:helloBTeam(us-central1)...
...

כתוב פונקציות במספר קבצים

כשאתה מתחיל עם פונקציות ענן, אתה עשוי לשים את הפונקציות הראשונות שלך בקובץ אחד:

index.js


const functions = require('firebase-functions');
exports.foo = functions.https.onRequest((request, response) => {
  // ...
});
exports.bar = functions.https.onRequest((request, response) => {
  // ...
});

זה יכול להיות קשה לניהול עם יותר מכמה פונקציות. במקום זאת, אתה יכול לשים את כל ההיגיון שלך עבור כל פונקציה בקובץ משלה ולהשתמש בקובץ index.js שלך כרשימה פשוטה של ​​ייצוא:

foo.js


const functions = require('firebase-functions');
exports.foo = functions.https.onRequest((request, response) => {
  // ...
});

bar.js


const functions = require('firebase-functions');
exports.bar = functions.https.onRequest((request, response) => {
  // ...
});

index.js


const foo = require('./foo');
const bar = require('./bar');
exports.foo = foo.foo;
exports.bar = bar.bar;

פונקציות קבוצתיות

בפרויקטים רבים, ניתן להפריד פונקציות לקבוצות לוגיות שיש לפרוס ולתחזק יחד. לדוגמה, ייתכן שיש לך קבוצה של פונקציות המשמשות לדיווח על מדדים:

metrics.js


const functions = require('firebase-functions');
exports.usageStats = functions.https.onRequest((request, response) => {
  // ...
});
exports.nightlyReport = functions.https.onRequest((request, response) => {
  // ...
});

אתה יכול להכניס את הפונקציות האלה לקבוצה בעת ייצוא שלהן בקובץ index.js שלך:

index.js


// Export both functions from metrics.js in the "metrics" group:
//  - metrics-usageStats
//  - metrics-nightlyReport
exports.metrics = require('./metrics');

בעת הפריסה, פונקציות יקדמו את שם הקבוצה שלהן, כך שבדוגמה זו הפונקציות metrics-usageStats ו- metrics-nightlyReport .

בעת פריסת פונקציות ניתן להגביל את הפעולה לקבוצה אחת:


firebase deploy --only functions:metrics

הצעדים הבאים

למידע נוסף על פונקציות ענן, ראה: