استفاده از TypeScript برای Cloud Functions

برای توسعه‌دهندگانی که ترجیح می‌دهند توابع را در TypeScript بنویسند، Cloud Functions دو نوع پشتیبانی ارائه می‌دهد:

  • پروژه‌های TypeScript را برای ترابران خودکار در زمان مقداردهی اولیه (firebase init functions) ایجاد و پیکربندی کنید.
  • در زمان استقرار ازطریق قلاب پیش‌از استقرار، منبع TypeScript موجود را به JavaScript تراتبدیل کنید.

با دنبال کردن دستورالعمل‌های این راهنما، می‌توانید پروژه JavaScript موجود را به TypeScript انتقال دهید و بااستفاده از قلاب پیش‌ازاستقرار برای تراتبدیل کردن کد منبع، به استقرار توابع ادامه دهید. ‫TypeScript هنگام نوشتن توابع مزایای زیادی نسبت به JavaScript خالص دارد:

  • ‫TypeScript از جدیدترین ویژگی‌های جاوا اسکریپت مانند async/await پشتیبانی می‌کند و مدیریت وعده را ساده می‌کند
  • یک لینتر Cloud Functions مشکلات رایج را درحین کدنویسی برجسته می‌کند
  • ایمنی نوع به شما کمک می‌کند از خطاهای زمان اجرا در توابع مستقرشده جلوگیری کنید

اگر با TypeScript آشنایی ندارید، TypeScript در ۵ دقیقه را ببینید.

درحال مقداردهی اولیه پروژه جدید Cloud Functions با TypeScript

‫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 موجودی دارید، می‌توانید قلاب پیش‌از استقرار را اضافه کنید تا مطمئن شوید هر بار که کدتان را در Cloud Functions for Firebase مستقر می‌کنید، پروژه شما تراتبدیل می‌شود. به فایل tsconfig.json با شکل صحیح و پروژه Firebase نیاز دارید و باید تغییرات زیر را در پیکربندی Firebase خود ایجاد کنید:

  1. برای افزودن یک اسکریپت bash برای ساختن پروژه 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 شما را می‌سازد و آن را به‌عنوان تابع مستقر می‌کند.

انتقال پروژه جاوا اسکریپت موجود به تایپ اسکریپت

اگر پروژه Cloud Functions موجودی دارید که آن را در جاوا اسکریپت مقداردهی اولیه و توسعه داده‌اید، می‌توانید آن را به TypeScript انتقال دهید. به‌شدت توصیه می‌شود قبل‌از شروع، یک نقطه بازرسی git یا پشتیبان دیگری ایجاد کنید.

برای انتقال پروژه 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 به‌صورت محلی، می‌توانید از ابزارهای شبیه‌سازی که در اجرای محلی توابع توضیح داده شده است استفاده کنید. مهم است که قبل‌از استفاده از این ابزارها، کدتان را کامپایل کنید، بنابراین قبل‌از اجرای 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 ترجیحی خود یا ازطریق واحد گره استفاده کنید.