Cloud Functions-এর জন্য TypeScript ব্যবহার করা

যেসব ডেভেলপার TypeScript-এ ফাংশন লিখতে পছন্দ করেন, Cloud Functions তাদের জন্য দুই ধরনের সহায়তা প্রদান করে:

  • ইনিশিয়ালাইজেশনের সময় (firebase init functions) অটোমেটিক ট্রান্সপাইলেশনের জন্য TypeScript প্রজেক্ট তৈরি ও কনফিগার করুন।
  • predeploy hook-এর মাধ্যমে ডিপ্লয় করার সময় আগে থেকে থাকা TypeScript সোর্সকে JavaScript-এ ট্রান্সপাইল করুন।

এই গাইডে দেওয়া নির্দেশাবলী অনুসরণ করে, আপনি আগে থেকে থাকা JavaScript প্রোজেক্টকে TypeScript-এ মাইগ্রেট করতে পারবেন এবং আপনার সোর্স কোড ট্রান্সপাইল করার জন্য প্রি-ডিপ্লয় হুক ব্যবহার করে ফাংশন ডিপ্লয় করা চালিয়ে যেতে পারবেন। ফাংশন লেখার সময়, সাধারণ জাভাস্ক্রিপ্টের তুলনায় TypeScript অনেক সুবিধা দেয়:

  • TypeScript-এ 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 কনফিগারেশনে আপনাকে নিম্নলিখিত পরিবর্তন করতে হবে:

  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 প্রোজেক্ট শুরু করে থাকেন এবং সেটি জাভাস্ক্রিপ্টে ডেভেলপ করে থাকেন, তাহলে আপনি সেটি টাইপস্ক্রিপ্টে মাইগ্রেট করতে পারবেন। শুরু করার আগে, আপনাকে একটি git চেকপয়েন্ট বা অন্য ব্যাকআপ তৈরি করার জন্য অত্যন্ত উৎসাহিত করা হচ্ছে।

আগে থেকে থাকা JavaScript Cloud Functions প্রোজেক্ট মাইগ্রেট করতে:

  1. git চেকপয়েন্ট তৈরি করুন এবং আপনার আগে থেকে থাকা জাভাস্ক্রিপ্ট সোর্স ফাইলের কপি সেভ করুন।
  2. প্রজেক্ট ডিরেক্টরিতে, firebase init functions রান করান এবং ফাংশন লেখার জন্য কোনও ভাষা প্রম্পট করা হলে TypeScript বেছে নিন।
  3. আগে থেকে থাকা package.json ফাইল ওভাররাইট করতে চান কিনা সেই বিষয়ে প্রম্পট করা হলে, না বিকল্প বেছে নিন, যদি না আপনি নিশ্চিত হন যে আগে থেকে থাকা ফাইলটি রাখতে চান না।
  4. আপনার আগে থেকে থাকা সোর্স কোড দিয়ে index.ts ডিরেক্টরি functions/src-তে এটি পরিবর্তন করে দিন।
  5. ইনিশিয়ালাইজেশনের সময় তৈরি হওয়া tsconfig.json ফাইলে, জাভাস্ক্রিপ্টকে অনুমতি দেওয়ার জন্য কম্পাইলার বিকল্প সেট করুন: "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-তে অথবা নোড মডিউলের মাধ্যমে এই সোর্স ম্যাপ ব্যবহার করতে পারবেন।