किसी फ़ंक्शन को बाहरी Node.js मॉड्यूल के साथ-साथ स्थानीय डेटा का इस्तेमाल करने की अनुमति होती है. Node.js में डिपेंडेंसी को npm की मदद से मैनेज किया जाता है. साथ ही, इन्हें package.json नाम की मेटाडेटा फ़ाइल में दिखाया जाता है. Cloud Functions के Node.js रनटाइम, npm, yarn या pnpm का इस्तेमाल करके इंस्टॉल करने की सुविधा देते हैं.
अपने फ़ंक्शन के लिए कोई डिपेंडेंसी तय करने के लिए, उसे अपनी package.json फ़ाइल में जोड़ें.
इस उदाहरण में, package.json फ़ाइल में एक डिपेंडेंसी दी गई है:
{ "dependencies": { "escape-html": "^1.0.3" } }
इसके बाद, डिपेंडेंसी को फ़ंक्शन में इंपोर्ट किया जाता है:
JavaScript
const onRequest = require("firebase-functions/https");
const escapeHtml = require("escape-html");
// Return a greeting with the input HTML-escaped.
exports.hello = onRequest((req, res) => {
res.send(Hello ${escapeHtml(req.query.name || req.body.name || "World")}!`);
});
TypeScript
import { onRequest } from "firebase-functions/https";
import * as escapeHtml from "escape-html";
// Return a greeting with the input HTML-escaped.
export let hello = 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 फ़ोल्डर के अलावा किसी दूसरी जगह पर सेव किया जाना चाहिए.
TypeScript के लिए अतिरिक्त चरण
टाइपस्क्रिप्ट, टाइप की जानकारी वाली लाइब्रेरी इस्तेमाल करने पर सबसे ज़्यादा मदद करती है.
इससे TypeScript को सिंटैक्स से जुड़ी गड़बड़ियों का पता लगाने में मदद मिलती है. साथ ही, एडिटर आपको बेहतर ऑटोकंप्लीट सुझाव दे पाते हैं. कुछ लाइब्रेरी, जैसे कि firebase-admin और firebase-functions, TypeScript की परिभाषाओं के साथ शिप की जाती हैं.
कई लाइब्रेरी, अपनी TypeScript डेफ़िनिशन उपलब्ध नहीं कराती हैं. DefinitelyTyped प्रोजेक्ट, सबसे लोकप्रिय नोड लाइब्रेरी के लिए कम्यूनिटी के ज़रिए बनाए गए टाइप की परिभाषाएं उपलब्ध कराता है.
DefinitelyTyped, इन परिभाषाओं को एक ही NPM पैकेज के नाम से पब्लिश करता है. हालांकि, यह "@types" संगठन के अंदर होता है. उदाहरण के लिए, uuid लाइब्रेरी के लिए टाइप की जानकारी को इस तरह इंस्टॉल किया जा सकता है:
npm install @types/uuid
TypeScript के बारे में ज़्यादा जानने के बाद, आपको दोनों इंस्टॉल को एक साथ इस्तेमाल करने का विकल्प मिल सकता है:
npm install uuid @types/uuid
टाइप डिपेंडेंसी, लाइब्रेरी डिपेंडेंसी की तरह ही होनी चाहिए. उदाहरण के लिए, आपको uuid को सामान्य डिपेंडेंसी के तौर पर और @types/uuid को देव डिपेंडेंसी या पीयर डिपेंडेंसी के तौर पर सेव नहीं करना चाहिए.
Node.js मॉड्यूल लोड करना
आपने जो भी Node.js मॉड्यूल इंस्टॉल किया है उसे लोड करने के लिए, Node.js
require()
फ़ंक्शन का इस्तेमाल करें. अपने फ़ंक्शन के साथ डिप्लॉय की गई स्थानीय फ़ाइलों को इंपोर्ट करने के लिए, require() फ़ंक्शन का इस्तेमाल भी किया जा सकता है.
अगर TypeScript में फ़ंक्शन लिखे जा रहे हैं, तो इंस्टॉल किए गए किसी भी Node.js मॉड्यूल को लोड करने के लिए, import स्टेटमेंट का इस्तेमाल उसी तरह करें.
निजी मॉड्यूल का इस्तेमाल करना
फ़ंक्शन की डायरेक्ट्री में मौजूद .npmrc फ़ाइल में, रजिस्ट्री से पुष्टि करने के लिए सेटिंग देकर, निजी npm मॉड्यूल का इस्तेमाल किया जा सकता है. अगर पैकेज मैनेजर के तौर पर Yarn v2 या इसके बाद के वर्शन का इस्तेमाल किया जा रहा है, तो इस फ़ाइल का नाम .yarnrc.yml होता है.
Artifact Registry से निजी मॉड्यूल
Artifact Registry Node.js पैकेज रिपॉज़िटरी, आपके फ़ंक्शन के लिए निजी मॉड्यूल होस्ट कर सकती है. Google Cloud Functions फ़ंक्शन को डिप्लॉय करने पर, बिल्ड प्रोसेस अपने-आप Cloud Build सेवा खाते के लिए Artifact Registry क्रेडेंशियल जनरेट करती है.
आपको .npmrc में सिर्फ़ Artifact Registry रिपॉज़िटरी को शामिल करना होगा. इसके लिए, आपको अतिरिक्त क्रेडेंशियल जनरेट करने की ज़रूरत नहीं है. उदाहरण के लिए:
@SCOPE:registry=https://REGION_ID-npm.pkg.dev/PROJECT_ID/REPOSITORY_NAME
//REGION_ID-npm.pkg.dev/PROJECT_ID/REPOSITORY_NAME:always-auth=true
यह तरीका, Yarn v1 पैकेज मैनेजर के लिए भी काम करता है.
अगर Yarn v2 या इसके बाद के वर्शन का इस्तेमाल किया जा रहा है, तो आपको .yarnrc.yml में Artifact Registry रिपॉज़िटरी को सिर्फ़ तब तक सूची में शामिल करना होगा, जब तक कि आपको अतिरिक्त क्रेडेंशियल की ज़रूरत न हो.
उदाहरण के लिए:
npmScopes:
SCOPE:
npmRegistryServer: https://REGION_ID-npm.pkg.dev/PROJECT_ID/REPOSITORY_NAME
npmAlwaysAuth: true
अन्य रिपॉज़िटरी के निजी मॉड्यूल
npm के दस्तावेज़ में, सिर्फ़ पढ़ने के लिए कस्टम ऐक्सेस टोकन बनाने का तरीका बताया गया है. हम होम डायरेक्ट्री में बनाई गई .npmrc फ़ाइल का इस्तेमाल करने का सुझाव नहीं देते, क्योंकि इसमें रीड-राइट टोकन होता है. डप्लॉयमेंट के दौरान, लिखने की अनुमतियों की ज़रूरत नहीं होती. इससे सुरक्षा से जुड़ा जोखिम पैदा हो सकता है.
अगर आपको निजी डेटाबेस का इस्तेमाल नहीं करना है, तो .npmrc फ़ाइल को शामिल न करें. इससे आपके फ़ंक्शन को डिप्लॉय करने में लगने वाला समय बढ़ सकता है.
फ़ाइल फ़ॉर्मैट
अगर कस्टम ऑथराइज़ेशन टोकन सेट करने के लिए .npmrc फ़ाइल का इस्तेमाल किया जा रहा है, तो इसमें नीचे दिखाई गई लाइन शामिल होनी चाहिए.
//REGISTRY_DOMAIN/:_authToken=AUTH_TOKEN
बदलें:
- REGISTRY_DOMAIN: आपकी निजी npm रजिस्ट्री का डोमेन नाम. अगर आपकी रिपॉज़िटरी
npmjs.orgपर होस्ट की गई है, तो इस फ़ील्ड कोregistry.npmjs.orgपर सेट करें. AUTH_TOKEN: आपकी npm रजिस्ट्री के लिए अनुमति देने वाला टोकन. यह टोकन की लिटरल टेक्स्ट वैल्यू या टेक्स्ट स्ट्रिंग
${NPM_TOKEN}हो सकती है.npm, एनवायरमेंट से मिली टोकन की असल वैल्यू से बदलता है.gcloud functions deployकमांड के--set-build-env-varsआर्ग्युमेंट की मदद से,$NPM_TOKENएनवायरमेंट वैरिएबल सेट किया जा सकता है. NPM के पुष्टि करने वाले टोकन के बारे में ज़्यादा जानकारी के लिए, NPM का निजता मॉड्यूल से जुड़ा ट्यूटोरियल देखें.