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

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

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

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

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

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

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

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

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

  1. अपना TypeScript प्रोजेक्ट बनाने के लिए बैश स्क्रिप्ट जोड़ने के लिए, 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 में माइग्रेट किया जा सकता है. हमारी सलाह है कि शुरू करने से पहले, आप एक गिट चेकपॉइंट या अन्य बैकअप ज़रूर बना लें.

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

  1. एक गिट चेकपॉइंट बनाएं और अपनी मौजूदा 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 बनाता है. इस सोर्स मैप का इस्तेमाल, अपने पसंदीदा आईडीई में या किसी नोड मॉड्यूल के ज़रिए किया जा सकता है.