Join us in person and online for Firebase Summit on October 18, 2022. Learn how Firebase can help you accelerate app development, release your app with confidence, and scale with ease. Register now

कई कार्यों को व्यवस्थित करें

संग्रह की मदद से व्यवस्थित रहें अपनी प्राथमिकताओं के आधार पर, कॉन्टेंट को सेव करें और कैटगरी में बांटें.

जैसे ही आप क्लाउड फ़ंक्शंस को अपने प्रोजेक्ट में एकीकृत करते हैं, आपका कोड कई स्वतंत्र कार्यों को शामिल करने के लिए विस्तारित हो सकता है। आपके पास एक फ़ाइल में यथोचित रूप से फ़िट होने के लिए बहुत सारे फ़ंक्शन हो सकते हैं, या अलग-अलग टीमें कार्यों के विभिन्न समूहों को तैनात कर सकती हैं, जिससे एक टीम के ओवरराइटिंग या गलती से किसी अन्य टीम के कार्यों को हटाने का जोखिम पैदा हो सकता है। क्लाउड फ़ंक्शंस आपके कोड को व्यवस्थित करने के विभिन्न तरीके प्रदान करता है ताकि आपके कार्यों को नेविगेट करना और बनाए रखना आसान हो सके।

कोडबेस में कार्यों को व्यवस्थित करें

आप एक एकल रिपॉजिटरी मोनोरेपो सेटअप के भीतर कई रिपॉजिटरी या उप-पैकेज में कार्यों के एक बड़े संग्रह को प्रबंधित करने के लिए firebase.json में फ़ंक्शन कॉन्फ़िगरेशन ऑब्जेक्ट की codebase प्रॉपर्टी का उपयोग कर सकते हैं:

# 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 प्रॉपर्टी फायरबेस सीएलआई v10.7.1 और इसके बाद के संस्करण में समर्थित है।

एकाधिक भंडारों का प्रबंधन

codebase संपत्ति कई रिपॉजिटरी के प्रबंधन को आसान बनाने में मदद कर सकती है। आइए एक ऐसे मामले की जांच करें जहां आपके पास दो अलग-अलग रिपॉजिटरी हैं जो एक ही फायरबेस प्रोजेक्ट में फ़ंक्शन को तैनात करते हैं:

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

कोडबेस एनोटेशन के बिना, फायरबेस सीएलआई ने आपको तैनाती के समय अन्य रिपॉजिटरी में परिभाषित कार्यों को हटाने के लिए प्रेरित किया होगा:

$ (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"
}

कोडबेस एनोटेशन के साथ, फायरबेस सीएलआई अब आपको अपने तत्काल भंडार के बाहर परिभाषित कार्यों को हटाने के लिए संकेत नहीं देता है:

$ (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!

एकाधिक स्रोत पैकेज प्रबंधित करना (मोनोरेपो)

codebase गुण एकल भंडार में एकाधिक स्रोत पैकेजों के प्रबंधन को सरल बनाने में मदद कर सकता है। आइए एक ऐसे मामले की जांच करें जहां आपके पास कई उप-पैकेजों में फैली फ़ंक्शन परिभाषाओं के साथ एक फायरबेस प्रोजेक्ट निर्देशिका है:

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

यह सेटअप निम्नलिखित उपयोग के मामलों में फिट बैठता है:

  • आपके पास एक मोनोरेपो सेटअप है और अलग-अलग टीमों ने एक अलग पैकेज में अपनी स्वयं की फ़ंक्शन परिभाषाओं का प्रबंधन किया है।
  • आपके पास एक भारी बाहरी निर्भरता और लंबे समय तक चलने वाला प्रारंभिक कार्य है, और उस फ़ंक्शन को अन्य, विलंबता-संवेदनशील कार्यों से अलग करना चाहते हैं।

इस तरह मोनरेपो सेटअप का समर्थन करने के लिए, firebase.json में कई फ़ंक्शन कॉन्फ़िगरेशन को परिभाषित करें:

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

इस कॉन्फ़िगरेशन के साथ, फायरबेस सीएलआई एक ही परिनियोजन कमांड में सभी पैकेजों के कार्यों को तैनात करता है:

$ 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 l10n-


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

bar.js l10n-


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

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

अगले कदम

क्लाउड फ़ंक्शंस के बारे में और जानने के लिए, देखें: