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

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

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

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

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

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

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 में सैंपल से टिप्पणी हटाएं और "Hello World" फ़ंक्शन को काम करते हुए देखने के लिए, npm run serve चलाएं.

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

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

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

     {
       "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 पर माइग्रेट किया जा सकता है. हमारा सुझाव है कि शुरू करने से पहले, कोई git चेकपॉइंट या कोई दूसरा बैकअप बनाएं.

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

  1. Git चेकपॉइंट बनाएं और अपनी मौजूदा JavaScript सोर्स फ़ाइलों की कॉपी सेव करें.
  2. प्रोजेक्ट डायरेक्ट्री में, firebase init functions चलाएं और फ़ंक्शन लिखने के लिए कोई भाषा चुनने के लिए कहा जाने पर, TypeScript चुनें.
  3. जब आपसे मौजूदा package.json फ़ाइल को ओवरराइट करने के लिए कहा जाए, तो नहीं चुनें. ऐसा तब तक करें, जब तक आपको यह पक्का न हो जाए कि आपको मौजूदा फ़ाइल नहीं रखनी है.
  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 फ़ाइल के लाइन नंबर दिखाएगा, न कि आपके लिखे गए कोड. index.ts में संबंधित पाथ और लाइन नंबर ढूंढने में आसानी हो, इसके लिए firebase deploy, functions/lib/index.js.map बनाता है. इस सोर्स मैप का इस्तेमाल, अपने पसंदीदा IDE या नोड मॉड्यूल की मदद से किया जा सकता है.