Cloud फ़ंक्शन के लिए TypeScript का इस्तेमाल करें

ऐसे डेवलपर जो TypeScript में फ़ंक्शन लिखना पसंद करते हैं, Cloud Functions दो तरह की सहायता करता है:

  • शुरू करने के समय, अपने-आप ट्रांसपिलेशन के लिए TypeScript प्रोजेक्ट बनाएं और कॉन्फ़िगर करें (firebase init functions).
  • एक preDeploy हुक के ज़रिए परिनियोजन के समय मौजूदा TypeScript स्रोत को JavaScript में ट्रांसप करें.

इस गाइड में दिए गए निर्देशों का पालन करके, किसी मौजूदा JavaScript प्रोजेक्ट को TypeScript में माइग्रेट किया जा सकता है. साथ ही, अपने सोर्स कोड को ट्रांसपाइल करने के लिए पहले से डिप्लॉय हुक का इस्तेमाल करके, फ़ंक्शन डिप्लॉय करना जारी रखा जा सकता है. फ़ंक्शन लिखते समय, TypeScript कई फ़ायदे देता है, जबकि वैनिला JavaScript को उससे ज़्यादा फ़ायदा मिलता है:

  • TypeScript, प्रॉमिस मैनेजमेंट को आसान बनाकर, एसिंक/अवेट जैसी नई JavaScript सुविधाओं के साथ काम करता है
  • कोडिंग के दौरान, Cloud Functions लिंटर की मदद से सामान्य समस्याओं को हाइलाइट किया जाता है
  • टाइप सेफ़्टी की मदद से, डिप्लॉय किए गए फ़ंक्शन में रनटाइम की गड़बड़ियों से बचा जा सकता है

अगर आपने टाइपस्क्रिप्ट का इस्तेमाल पहले कभी नहीं किया है, तो पांच मिनट में टाइपस्क्रिप्ट देखें.

TypeScript के साथ नया Cloud Functions प्रोजेक्ट शुरू करना

firebase init functions को नई डायरेक्ट्री में चलाएं. यह टूल आपको JavaScript या TypeScript के साथ प्रोजेक्ट बनाने के विकल्प देता है. नीचे दिए गए प्रोजेक्ट स्ट्रक्चर को आउटपुट करने के लिए, TypeScript चुनें:

myproject
 +- functions/     # Directory containing all your functions code
      |
      +- package.json  # npm package file describing your Cloud Functions code
      |
      +- tsconfig.json
      |
      +- .eslintrc.js # Optional file if you enabled ESLint
      +- tsconfig.dev.json # Optional file that references .eslintrc.js
      |
      +- src/     # Directory containing TypeScript source
      |   |
      |   +- index.ts  # main source file for your Cloud Functions code
      |
      +- lib/
          |
          +- index.js  # Built/transpiled JavaScript code
          |
          +- index.js.map # Source map for debugging

शुरू करने की प्रोसेस पूरी होने के बाद, index.ts में सैंपल की टिप्पणी को अनटिप्पणी करें और "Hey World" के काम करने का तरीका देखने के लिए npm run serve चलाएं.

किसी मौजूदा TypeScript प्रोजेक्ट का इस्तेमाल करना

अगर आपके पास कोई मौजूदा TypeScript प्रोजेक्ट है, तो यह पक्का करने के लिए कि आपके प्रोजेक्ट को हर बार Firebase के Cloud Functions में डिप्लॉय किए जाने पर, आपका प्रोजेक्ट ट्रांसपिल किया जाए. इसके लिए, आपको सही तरीके से बनाई गई tsconfig.json फ़ाइल और एक Firebase प्रोजेक्ट की ज़रूरत होगी. साथ ही, आपको अपने Firebase कॉन्फ़िगरेशन में ये बदलाव करने होंगे:

  1. package.json में बदलाव करके, बैश स्क्रिप्ट जोड़ें और अपना TypeScript प्रोजेक्ट बनाएं. उदाहरण के लिए:

     {
       "name": "functions",
       "scripts": {
         "build": "npm run lint && tsc"
       }
     ...
    
  2. बिल्ड स्क्रिप्ट को चलाने के लिए, firebase.json में बदलाव करें, ताकि पहले से डिप्लॉय किया जा सके हुक जोड़ा जा सके. उदाहरण के लिए:

     {
       "functions": {
         "predeploy": "npm --prefix functions run build",
       }
     }
    

इस कॉन्फ़िगरेशन के साथ, firebase deploy --only functions निर्देश आपका TypeScript कोड बनाता है और उसे फ़ंक्शन के तौर पर डिप्लॉय करता है.

मौजूदा JavaScript प्रोजेक्ट को TypeScript में माइग्रेट करना

अगर आपके पास कोई ऐसा मौजूदा Cloud Functions प्रोजेक्ट है जिसे आपने JavaScript में शुरू और डेवलप किया है, तो उसे TypeScript में माइग्रेट किया जा सकता है. शुरू करने से पहले, यह सलाह दी जाती है कि आप एक गिट चेकपॉइंट या कोई दूसरा बैकअप बना लें.

मौजूदा JavaScript Cloud Functions प्रोजेक्ट को माइग्रेट करने के लिए:

  1. एक git Checkpoint बनाएं और अपनी मौजूदा JavaScript सोर्स फ़ाइलों की कॉपी सेव करें.
  2. प्रोजेक्ट डायरेक्ट्री में, firebase init functions चलाएं और लिखने के फ़ंक्शन के लिए किसी भाषा का पूछे जाने पर TypeScript चुनें.
  3. जब यह पूछा जाए कि मौजूदा package.json फ़ाइल को ओवरराइट करना है या नहीं, तो No को तब तक चुनें, जब तक कि आपको मौजूदा फ़ाइल को न रखना हो.
  4. functions/src डायरेक्ट्री में मौजूद index.ts को मिटाएं. इसके बाद, इसे अपने मौजूदा सोर्स कोड से बदलें.
  5. शुरू करते समय बनाई गई tsconfig.json फ़ाइल में, JavaScript को अनुमति देने के लिए कंपाइलर विकल्प सेट करें: "allowJs": true.
  6. अपनी सेव की गई package.json फ़ाइल को functions डायरेक्ट्री में कॉपी करें और "main" को "lib/index.js" पर सेट करने के लिए, इसमें बदलाव करें.
  7. साथ ही, package.json में, TypeScript के लिए एक बिल्ड स्क्रिप्ट जोड़ें, जैसे कि:

     {
       "name": "functions",
       "scripts": {
         "build": "npm run lint && tsc"
       }
     ...
    
  8. npm install --save-dev typescript @typescript-eslint/eslint-plugin @typescript-eslint/parser चलाकर, "typescript" को डेव डिपेंडेंसी के तौर पर जोड़ें.

  9. सभी डिपेंडेंसी के लिए npm install --save @types/<dependency> चलाएं.

  10. अपने हिसाब से सोर्स कोड को .js से .ts में लिखें.

TypeScript फ़ंक्शन को एम्युलेट करना

TypeScript फ़ंक्शन को स्थानीय तौर पर टेस्ट करने के लिए, फ़ंक्शन को स्थानीय तौर पर चलाएं में बताए गए एम्युलेशन टूल का इस्तेमाल किया जा सकता है. इन टूल का इस्तेमाल करने से पहले, अपने कोड को कंपाइल करना ज़रूरी है. इसलिए, firebase emulators:start या firebase functions:shell चलाने से पहले, अपनी फ़ंक्शन डायरेक्ट्री के अंदर npm run build को ज़रूर चलाएं. इसके अलावा, npm run serve या npm run shell को शॉर्टकट के तौर पर चलाएं. ये निर्देश, फ़ंक्शन शेल को बनाने और उसे चलाने/शुरू करने, दोनों को चलाते हैं.

TypeScript प्रोजेक्ट के लिए फ़ंक्शन लॉग

firebase deploy के दौरान, आपके प्रोजेक्ट के index.ts को index.js में ट्रांसपिल किया जाता है. इसका मतलब है कि Cloud Functions लॉग, index.js फ़ाइल से लाइन नंबर जनरेट करेगा, न कि आपके लिखे गए कोड से. firebase deploy, functions/lib/index.js.map बनाता है, ताकि आप index.ts में मिलते-जुलते पाथ और लाइन नंबर आसानी से ढूंढ सकें. इस सोर्स मैप का इस्तेमाल, अपने पसंदीदा IDE या नोड मॉड्यूल की मदद से किया जा सकता है.