ऐसे डेवलपर जो TypeScript में फ़ंक्शन लिखना पसंद करते हैं उनके लिए, Cloud Functions दो तरह की सुविधाएं उपलब्ध कराता है:
- शुरू करने के दौरान, अपने-आप ट्रांसपाइल होने के लिए, TypeScript प्रोजेक्ट बनाएं और उन्हें कॉन्फ़िगर करें (
firebase init functions). - डिप्लॉय करने के दौरान, पहले से मौजूद TypeScript सोर्स को JavaScript में ट्रांसपाइल करने के लिए, predeploy हुक का इस्तेमाल करें.
इस गाइड में दिए गए निर्देशों का पालन करके, मौजूदा JavaScript प्रोजेक्ट को TypeScript में माइग्रेट किया जा सकता है. साथ ही, सोर्स कोड को ट्रांसपाइल करने के लिए, predeploy हुक का इस्तेमाल करके फ़ंक्शन डिप्लॉय किए जा सकते हैं. फ़ंक्शन लिखते समय, TypeScript के कई फ़ायदे होते हैं. जैसे:
- 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 चलाएं. इससे आपको "Hello World" फ़ंक्शन दिखेगा.
मौजूदा TypeScript प्रोजेक्ट का इस्तेमाल करना
अगर आपके पास पहले से कोई TypeScript प्रोजेक्ट है, तो उसमें predeploy हुक जोड़ा जा सकता है. इससे यह पक्का किया जा सकेगा कि
कोड डिप्लॉय करने पर, आपका प्रोजेक्ट हर बार ट्रांसपाइल हो
Cloud Functions for Firebase. इसके लिए, आपके पास सही फ़ॉर्मैट वाली tsconfig.json फ़ाइल और Firebase प्रोजेक्ट होना चाहिए. साथ ही, आपको Firebase के कॉन्फ़िगरेशन में ये बदलाव करने होंगे:
अपने TypeScript प्रोजेक्ट को बनाने के लिए,
package.jsonमें bash स्क्रिप्ट जोड़ें. उदाहरण के लिए:{ "name": "functions", "scripts": { "build": "npm run lint && tsc" } ...बिल्ड स्क्रिप्ट चलाने के लिए,
firebase.jsonमें predeploy हुक जोड़ें. उदाहरण के लिए:{ "functions": { "predeploy": "npm --prefix functions run build", } }
इस कॉन्फ़िगरेशन के साथ, firebase deploy --only functions कमांड, आपके TypeScript कोड को बिल्ड करता है और उसे फ़ंक्शन के तौर पर डिप्लॉय करता है.
मौजूदा JavaScript प्रोजेक्ट को TypeScript में माइग्रेट करना
अगर आपके पास कोई ऐसा Cloud Functions प्रोजेक्ट है जिसे JavaScript में शुरू और डेवलप किया गया है, तो उसे TypeScript में माइग्रेट किया जा सकता है. हमारा सुझाव है कि शुरू करने से पहले, गिट चेकपॉइंट या कोई अन्य बैकअप बनाएं.
मौजूदा JavaScript Cloud Functions प्रोजेक्ट को माइग्रेट करने के लिए:
- गिट चेकपॉइंट बनाएं और 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 में या नोड मॉड्यूल के ज़रिए किया जा सकता है.