از TypeScript برای توابع ابری استفاده کنید

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

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

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

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

اگر در TypeScript تازه‌کار هستید، TypeScript را در ۵ دقیقه ببینید.

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

firebase init functions در یک دایرکتوری جدید اجرا کنید. این ابزار به شما گزینه‌هایی برای ساخت پروژه با جاوا اسکریپت یا تایپ اسکریپت می‌دهد. تایپ اسکریپت را انتخاب کنید تا ساختار پروژه زیر را خروجی دهید:

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 مستقر می‌کنید، transpile می‌شود. به یک فایل tsconfig.json با ساختار صحیح و یک پروژه Firebase نیاز دارید و باید تغییرات زیر را در پیکربندی Firebase خود اعمال کنید:

  1. package.json ویرایش کنید تا یک اسکریپت bash برای ساخت پروژه TypeScript خود اضافه کنید. برای مثال:

     {
       "name": "functions",
       "scripts": {
         "build": "npm run lint && tsc"
       }
     ...
    
  2. firebase.json ویرایش کنید تا یک قلاب predeploy برای اجرای اسکریپت ساخت اضافه شود. برای مثال:

     {
       "functions": {
         "predeploy": "npm --prefix functions run build",
       }
     }
    

با این پیکربندی، دستور firebase deploy --only functions کد TypeScript شما را می‌سازد و آن را به عنوان توابع مستقر می‌کند.

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

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

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

  1. یک گیت چک پوینت ایجاد کنید و کپی‌هایی از فایل‌های منبع جاوا اسکریپت موجود خود را ذخیره کنید.
  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 به صورت محلی، می‌توانید از ابزارهای شبیه‌سازی شرح داده شده در Run functions locally استفاده کنید. کامپایل کردن کد قبل از استفاده از این ابزارها مهم است، بنابراین قبل از اجرای firebase emulators:start یا firebase functions:shell مطمئن شوید که npm run build در داخل دایرکتوری functions خود اجرا کرده‌اید. به عنوان یک راه حل جایگزین، می‌توانید npm run serve یا npm run shell به عنوان میانبر اجرا کنید. این دستورات هم build را اجرا می‌کنند و هم پوسته functions را serve/start می‌کنند.

لاگ‌های توابع برای پروژه‌های TypeScript

در طول firebase deploy ، index.ts پروژه شما به index.js منتقل می‌شود، به این معنی که گزارش توابع ابری، شماره خطوط را از فایل index.js و نه کدی که شما نوشته‌اید، نمایش می‌دهد. برای اینکه پیدا کردن مسیرها و شماره خطوط مربوطه در index.ts برای شما آسان‌تر شود، firebase deploy functions/lib/index.js.map را ایجاد می‌کند. می‌توانید از این نقشه منبع در IDE مورد نظر خود یا از طریق یک ماژول node استفاده کنید.