Catch up on highlights from Firebase at Google I/O 2023. Learn more

निर्भरता को संभालना

एक फ़ंक्शन को बाहरी Node.js मॉड्यूल के साथ-साथ स्थानीय डेटा का उपयोग करने की अनुमति है। Node.js में निर्भरताएँ npm के साथ प्रबंधित की जाती हैं और package.json नामक मेटाडेटा फ़ाइल में व्यक्त की जाती हैं। क्लाउड फ़ंक्शंस नोड.जेएस रनटाइम एनपीएम , यार्न या पीएनपीएम का उपयोग करके स्थापित करने का समर्थन करता है।

अपने फ़ंक्शन के लिए निर्भरता निर्दिष्ट करने के लिए, इसे अपनी package.json फ़ाइल में जोड़ें।

इस उदाहरण में, एक निर्भरता package.json फ़ाइल में सूचीबद्ध है:

{
  "dependencies": {
    "escape-html": "^1.0.3"
  }
}

निर्भरता तब फ़ंक्शन में आयात की जाती है:

जावास्क्रिप्ट

const escapeHtml = require('escape-html');

// Return a greeting with the input HTML-escaped.
exports.hello = functions.https.onRequest((req, res) => {
  res.send(`Hello ${escapeHtml(req.query.name || req.body.name || 'World')}!`);
});

टाइपप्रति

import * as escapeHtml from 'escape-html';

// Return a greeting with the input HTML-escaped.
export let hello = functions.https.onRequest((req, res) => {
  res.send(`Hello ${escapeHtml(req.query.name || req.body.name || 'World')}!`);
}

स्थानीय Node.js मॉड्यूल सहित

आप अपने कार्य के भाग के रूप में स्थानीय Node.js मॉड्यूल भी शामिल कर सकते हैं। आप file: उपसर्ग का उपयोग करके package.json में अपने मॉड्यूल को घोषित करके इसे प्राप्त कर सकते हैं। निम्नलिखित उदाहरण में, mymodule आपके मॉड्यूल नाम को संदर्भित करता है और mymoduledir आपके मॉड्यूल वाली निर्देशिका है:

{
  "dependencies": {
    "mymodule": "file:mymoduledir"
  }
}

इस स्थानीय मॉड्यूल के लिए कोड आपके फ़ंक्शन की रूट निर्देशिका में node_modules फ़ोल्डर के अलावा कहीं और संग्रहित किया जाना चाहिए।

टाइपस्क्रिप्ट के लिए अतिरिक्त कदम

टाइपस्क्रिप्ट आपकी सबसे अधिक मदद करता है जब आप उन पुस्तकालयों का उपयोग करते हैं जिनमें प्रकार की जानकारी होती है। यह टाइपस्क्रिप्ट को सिंटैक्स त्रुटियों को पकड़ने देता है और संपादकों को आपको बेहतर स्वत: पूर्ण सुझाव देने देता है। कुछ पुस्तकालय, जैसे कि firebase-admin और firebase-functions , टाइपस्क्रिप्ट परिभाषाओं के साथ जहाज शामिल हैं।

कई पुस्तकालय अपनी टाइपस्क्रिप्ट परिभाषा प्रदान नहीं करते हैं। निश्चित रूप से टाइप की गई परियोजना सबसे लोकप्रिय नोड पुस्तकालयों के लिए समुदाय-अनुरक्षित परिभाषाएँ प्रदान करती है। निश्चित रूप से टाइप इन परिभाषाओं को उसी एनपीएम पैकेज नाम के तहत प्रकाशित करता है, लेकिन "@types" संगठन के अंदर। उदाहरण के लिए, आप निम्न के साथ uuid पुस्तकालय के लिए प्रकार की जानकारी स्थापित कर सकते हैं:

npm install @types/uuid

जैसा कि आप टाइपस्क्रिप्ट से अधिक परिचित हो जाते हैं, आप स्वयं को दोनों स्थापनाओं का संयोजन करते हुए पा सकते हैं:

npm install uuid @types/uuid

टाइप डिपेंडेंसी उसी तरह की होनी चाहिए जैसे लाइब्रेरी डिपेंडेंसी। उदाहरण के लिए, आपको uuid सामान्य निर्भरता के रूप में और @types/uuid देव निर्भरता या सहकर्मी निर्भरता के रूप में नहीं सहेजना चाहिए।

लोड हो रहा है Node.js मॉड्यूल

आपके द्वारा स्थापित किसी भी Node.js मॉड्यूल को लोड करने के लिए Node.js require() फ़ंक्शन का उपयोग करें। आप अपने फ़ंक्शन के साथ तैनात स्थानीय फ़ाइलों को आयात करने के लिए require() फ़ंक्शन का भी उपयोग कर सकते हैं।

यदि आप टाइपस्क्रिप्ट में फ़ंक्शन लिख रहे हैं, तो import स्टेटमेंट का उसी तरह उपयोग करें जैसे आपने स्थापित किए गए किसी भी Node.js मॉड्यूल को लोड करने के लिए किया है।

निजी मॉड्यूल का उपयोग करना

आप फ़ंक्शन की निर्देशिका में .npmrc फ़ाइल में रजिस्ट्री के साथ प्रमाणीकरण के लिए सेटिंग्स प्रदान करके एक निजी npm मॉड्यूल का उपयोग कर सकते हैं। यदि आप Yarn v2 या उच्चतर का उपयोग अपने पैकेज प्रबंधक के रूप में कर रहे हैं, तो इस फ़ाइल का नाम .yarnrc.yml है।

विरूपण साक्ष्य रजिस्ट्री से निजी मॉड्यूल

एक विरूपण साक्ष्य रजिस्ट्री Node.js पैकेज रिपॉजिटरी आपके कार्य के लिए निजी मॉड्यूल की मेजबानी कर सकती है। जब आप एक Google क्लाउड फ़ंक्शन फ़ंक्शन परिनियोजित करते हैं, तो निर्माण प्रक्रिया स्वचालित रूप से क्लाउड बिल्ड सेवा खाते के लिए आर्टिफैक्ट रजिस्ट्री प्रमाणिकता उत्पन्न करती है। आपको केवल अपने .npmrc में आर्टिफैक्ट रजिस्ट्री रिपॉजिटरी को अतिरिक्त प्रमाण-पत्र उत्पन्न किए बिना सूचीबद्ध करने की आवश्यकता है। उदाहरण के लिए:

@SCOPE:registry=https://REGION_ID-npm.pkg.dev/PROJECT_ID/REPOSITORY_NAME
//REGION_ID-npm.pkg.dev/PROJECT_ID/REPOSITORY_NAME:always-auth=true

यह तरीका यार्न v1 पैकेज मैनेजर के लिए भी काम करता है। यदि आप Yarn v2 या उच्चतर का उपयोग कर रहे हैं, तो आपको केवल अतिरिक्त क्रेडेंशियल्स के बिना अपने .yarnrc.yml में आर्टिफैक्ट रजिस्ट्री रिपॉजिटरी को सूचीबद्ध करने की आवश्यकता है। उदाहरण के लिए:

npmScopes:
  SCOPE:
    npmRegistryServer: https://REGION_ID-npm.pkg.dev/PROJECT_ID/REPOSITORY_NAME
    npmAlwaysAuth: true

अन्य रिपॉजिटरी से निजी मॉड्यूल

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

यदि आप निजी रिपॉजिटरी का उपयोग नहीं कर रहे हैं तो .npmrc फ़ाइल को शामिल न करें, क्योंकि यह आपके कार्यों के लिए परिनियोजन समय बढ़ा सकती है।

फ़ाइल फ़ारमैट

यदि आप कस्टम प्रमाणीकरण टोकन सेट करने के लिए .npmrc फ़ाइल का उपयोग कर रहे हैं, तो इसमें नीचे दिखाई गई पंक्ति शामिल होनी चाहिए।

//REGISTRY_DOMAIN/:_authToken=AUTH_TOKEN

बदलना:

  • REGISTRY_DOMAIN : आपकी निजी npm रजिस्ट्री का डोमेन नाम। यदि आपका रिपॉजिटरी npmjs.org के साथ होस्ट किया गया है, तो इस फील्ड को registry.npmjs.org पर सेट करें।
  • AUTH_TOKEN : आपकी एनपीएम रजिस्ट्री के लिए प्राधिकरण टोकन। यह या तो टोकन का शाब्दिक पाठ मान या पाठ स्ट्रिंग ${NPM_TOKEN} हो सकता है, जिसे npm पर्यावरण से वास्तविक टोकन मान से बदल देता है।

    आप $NPM_TOKEN पर्यावरण चर को --set-build-env-vars तर्क के साथ अपने gcloud functions deploy कमांड पर सेट कर सकते हैं। NPM प्रमाणन टोकन के बारे में अधिक जानकारी के लिए निजी मॉड्यूल पर NPM ट्यूटोरियल देखें।