TypeScript में फ़ंक्शन लिखने वाले डेवलपर के लिए, Cloud Functions दो तरह की सहायता उपलब्ध कराता है:
- TypeScript प्रोजेक्ट बनाएं और उन्हें कॉन्फ़िगर करें, ताकि शुरू होने पर (
firebase init functions) अपने-आप ट्रांसपाइल हो जाएं. - प्रीडिप्लॉय हुक की मदद से, डिप्लॉय करते समय मौजूदा TypeScript सोर्स को JavaScript में ट्रांसपाइल करें.
इस गाइड में दिए गए निर्देशों का पालन करके, किसी मौजूदा JavaScript प्रोजेक्ट को TypeScript में माइग्रेट किया जा सकता है. साथ ही, अपने सोर्स कोड को ट्रांसपाइल करने के लिए, predeploy हुक का इस्तेमाल करके फ़ंक्शन डिप्लॉय करना जारी रखा जा सकता है. फ़ंक्शन लिखते समय, TypeScript से वैनिला JavaScript के मुकाबले कई फ़ायदे मिलते हैं:
- TypeScript, JavaScript की नई सुविधाओं के साथ काम करता है. जैसे, async/await. इससे प्रॉमिस को मैनेज करना आसान हो जाता है
- Cloud Functions लिंटर, कोडिंग के दौरान होने वाली सामान्य समस्याओं को हाइलाइट करता है
- टाइप सेफ़्टी की मदद से, डिप्लॉय किए गए फ़ंक्शन में रनटाइम से जुड़ी गड़बड़ियों से बचा जा सकता है
अगर आपके लिए TypeScript नया है, तो TypeScript in 5 minutes देखें.
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 प्रोजेक्ट है, तो उसमें predeploy हुक जोड़ा जा सकता है. इससे यह पक्का किया जा सकता है कि Cloud Functions for Firebase पर कोड डिप्लॉय करने पर, आपका प्रोजेक्ट हर बार ट्रांसपाइल हो. आपको सही तरीके से बनाई गई tsconfig.json फ़ाइल और Firebase प्रोजेक्ट की ज़रूरत होगी. साथ ही, आपको अपने Firebase कॉन्फ़िगरेशन में ये बदलाव करने होंगे:
अपने TypeScript प्रोजेक्ट को बनाने के लिए, बैश स्क्रिप्ट जोड़ने के लिए
package.jsonमें बदलाव करें. उदाहरण के लिए:{ "name": "functions", "scripts": { "build": "npm run lint && tsc" } ...बिल्ड स्क्रिप्ट को चलाने के लिए,
firebase.jsonमें बदलाव करके, डिप्लॉय करने से पहले इस्तेमाल होने वाला हुक जोड़ें. उदाहरण के लिए:{ "functions": { "predeploy": "npm --prefix functions run build", } }
इस कॉन्फ़िगरेशन के साथ, firebase deploy --only functions कमांड आपके TypeScript कोड को बनाता है और उसे फ़ंक्शन के तौर पर डिप्लॉय करता है.
किसी मौजूदा JavaScript प्रोजेक्ट को TypeScript पर माइग्रेट करना
अगर आपके पास कोई ऐसा मौजूदा Cloud Functions प्रोजेक्ट है जिसे आपने JavaScript में शुरू और डेवलप किया है, तो उसे TypeScript पर माइग्रेट किया जा सकता है. हमारा सुझाव है कि शुरू करने से पहले, Git चेकपॉइंट या कोई अन्य बैकअप बनाएं.
किसी मौजूदा JavaScript Cloud Functions प्रोजेक्ट को माइग्रेट करने के लिए:
- एक Git चेकपॉइंट बनाएं और अपनी मौजूदा JavaScript सोर्स फ़ाइलों की कॉपी सेव करें.
- प्रोजेक्ट डायरेक्ट्री में,
firebase init functionsचलाएं. इसके बाद, फ़ंक्शन लिखने के लिए भाषा चुनने का प्रॉम्प्ट मिलने पर,TypeScriptको चुनें. - जब आपसे पूछा जाए कि क्या आपको मौजूदा
package.jsonफ़ाइल को ओवरराइट करना है, तो नहीं चुनें. ऐसा तब तक करें, जब तक आपको यह पक्का न हो जाए कि आपको मौजूदा फ़ाइल नहीं रखनी है. - डायरेक्ट्री
functions/srcमें मौजूदindex.tsको मिटाएं और उसकी जगह अपना मौजूदा सोर्स कोड डालें. - शुरुआत में बनाई गई
tsconfig.jsonफ़ाइल में, कंपाइलर के विकल्पों को JavaScript की अनुमति देने के लिए सेट करें:"allowJs": true. - सेव की गई
package.jsonफ़ाइल कोfunctionsडायरेक्ट्री में कॉपी करें. इसके बाद,"main"को"lib/index.js"पर सेट करने के लिए, उसमें बदलाव करें. package.jsonमें, TypeScript के लिए एक बिल्ड स्क्रिप्ट भी जोड़ें. जैसे:{ "name": "functions", "scripts": { "build": "npm run lint && tsc" } ...npm install --save-dev typescript @typescript-eslint/eslint-plugin @typescript-eslint/parserचलाकर,"typescript"को डेवलपर डिपेंडेंसी के तौर पर जोड़ें.सभी डिपेंडेंसी के लिए,
npm install --save @types/<dependency>चलाएं.सोर्स कोड को .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 में या नोड मॉड्यूल के ज़रिए किया जा सकता है.