टाइपस्क्रिप्ट में फ़ंक्शन लिखने वाले डेवलपर के लिए, Cloud Functions दो तरह की सहायता उपलब्ध कराता है:
- शुरू होने पर अपने-आप ट्रांसपाइल होने के लिए, TypeScript प्रोजेक्ट बनाएं और कॉन्फ़िगर करें (
firebase init functions
). - predeploy hook का इस्तेमाल करके, डिप्लॉय करने के समय मौजूदा TypeScript सोर्स को JavaScript में ट्रांसपाइल करें.
इस गाइड में दिए गए निर्देशों का पालन करके, मौजूदा JavaScript प्रोजेक्ट को TypeScript पर माइग्रेट किया जा सकता है. साथ ही, अपने सोर्स कोड को ट्रांसपाइल करने के लिए, predeploy हुक का इस्तेमाल करके फ़ंक्शन डिप्लॉय किए जा सकते हैं. फ़ंक्शन लिखते समय, TypeScript के कई फ़ायदे हैं. ये फ़ायदे, JavaScript के मुकाबले ज़्यादा हैं:
- TypeScript, JavaScript की नई सुविधाओं के साथ काम करता है. जैसे, async/await. इससे प्रॉमिस मैनेजमेंट आसान हो जाता है
- 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 में मौजूद सैंपल से टिप्पणी हटाने के लिए, npm run serve
चलाएं. इससे "Hello World" फ़ंक्शन काम करता हुआ दिखेगा.
किसी मौजूदा TypeScript प्रोजेक्ट का इस्तेमाल करना
अगर आपके पास पहले से कोई TypeScript प्रोजेक्ट है, तो उसमें predeploy हुक जोड़ा जा सकता है. इससे यह पक्का किया जा सकेगा कि जब भी Cloud Functions for Firebase पर कोड डिप्लॉय किया जाए, तब आपका प्रोजेक्ट ट्रांसपाइल हो जाए. इसके लिए, आपको सही तरीके से बनाई गई tsconfig.json
फ़ाइल और Firebase प्रोजेक्ट की ज़रूरत होगी. साथ ही, आपको Firebase कॉन्फ़िगरेशन में ये बदलाव करने होंगे:
अपने TypeScript प्रोजेक्ट को बनाने के लिए, bash स्क्रिप्ट जोड़ने के लिए
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"
को dev dependency के तौर पर जोड़ें.सभी डिपेंडेंसी के लिए,
npm install --save @types/<dependency>
चलाएं.सोर्स कोड को .js से .ts में अपनी ज़रूरत के हिसाब से फिर से लिखें.
टाइपस्क्रिप्ट फ़ंक्शन को एम्युलेट करना
TypeScript फ़ंक्शन को स्थानीय तौर पर टेस्ट करने के लिए, फ़ंक्शन को स्थानीय तौर पर चलाना लेख में बताए गए एम्युलेशन टूल का इस्तेमाल किया जा सकता है. इन टूल का इस्तेमाल करने से पहले, अपने कोड को कंपाइल करना ज़रूरी है. इसलिए, firebase emulators:start
या firebase functions:shell
चलाने से पहले, फ़ंक्शन डायरेक्ट्री में npm run build
चलाना न भूलें. इसके अलावा, शॉर्टकट के तौर पर npm run serve
या npm run shell
चलाएं. ये दोनों कमांड, बिल्ड को चलाती हैं और फ़ंक्शन शेल को चालू/शुरू करती हैं.
टाइपस्क्रिप्ट प्रोजेक्ट के लिए फ़ंक्शन लॉग
firebase deploy
के दौरान, आपके प्रोजेक्ट के index.ts
को index.js
में ट्रांसपाइल किया जाता है.
इसका मतलब है कि Cloud Functions का लॉग, index.js
फ़ाइल से लाइन नंबर दिखाएगा. यह आपके लिखे गए कोड से लाइन नंबर नहीं दिखाएगा. index.ts
में, आपको मिलते-जुलते पाथ और लाइन नंबर आसानी से मिल सकें, इसके लिए firebase deploy
, functions/lib/index.js.map
बनाता है. इस सोर्स मैप का इस्तेमाल, अपने पसंदीदा IDE में या नोड मॉड्यूल के ज़रिए किया जा सकता है.