استخدام TypeScript لوظائف السحابة الإلكترونية

بالنسبة إلى المطوّرين الذين يفضّلون كتابة الدوال في TypeScript، توفّر Cloud Functions نوعَين من الدعم:

  • إنشاء مشاريع TypeScript وضبطها لإجراء عملية التحويل التلقائي عند بدء التشغيل (firebase init functions)
  • تحويل رمز مصدر TypeScript الحالي إلى JavaScript في وقت النشر من خلال خطاف ما قبل النشر

باتّباع التعليمات الواردة في هذا الدليل، يمكنك نقل مشروع JavaScript حالي إلى TypeScript ومواصلة نشر الدوال باستخدام خطاف قبل النشر لتحويل الرمز المصدر. توفّر TypeScript العديد من المزايا مقارنةً بلغة JavaScript العادية عند كتابة الدوال:

  • تتوافق TypeScript مع أحدث ميزات JavaScript، مثل async/await، ما يسهّل إدارة الوعود.
  • يُبرز مدقق Cloud Functions المشاكل الشائعة أثناء كتابة الرمز البرمجي
  • تساعد ميزة "أمان الأنواع" في تجنُّب أخطاء وقت التشغيل في الدوال التي تم نشرها

إذا كنت حديث العهد باستخدام TypeScript، اطّلِع على TypeScript في 5 دقائق.

بدء مشروع 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 لرؤية دالة "Hello World" أثناء عملها.

استخدام مشروع TypeScript حالي

إذا كان لديك مشروع TypeScript حالي، يمكنك إضافة خطاف ما قبل النشر للتأكّد من ترجمة مشروعك في كل مرة تنشر فيها الرمز إلى Cloud Functions for Firebase. ستحتاج إلى ملف tsconfig.json منسَّق بشكل صحيح وإلى مشروع على Firebase، كما ستحتاج إلى إجراء التعديلات التالية على إعدادات Firebase:

  1. عدِّل package.json لإضافة نص برمجي bash لإنشاء مشروع TypeScript. على سبيل المثال:

     {
       "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 حالي تم إعداده وتطويره باستخدام JavaScript، يمكنك نقل البيانات إلى TypeScript. ننصحك بشدة بإنشاء نقطة حفظ git أو نسخة احتياطية أخرى قبل البدء.

لنقل بيانات مشروع JavaScript Cloud Functions حالي، اتّبِع الخطوات التالية:

  1. أنشئ نقطة حفظ git واحفظ نُسخًا من ملفات مصدر JavaScript الحالية.
  2. في دليل المشروع، شغِّل firebase init functions واختَر TypeScript عندما يُطلب منك تحديد لغة لكتابة الدوال.
  3. عندما يُطلب منك تحديد ما إذا كنت تريد استبدال ملف package.json الحالي، انقر على لا ما لم تكن متأكدًا من أنّك لا تريد الاحتفاظ بالملف الحالي.
  4. احذف index.ts في الدليل functions/src، واستبدِله برمز المصدر الحالي.
  5. في ملف tsconfig.json الذي تم إنشاؤه عند بدء التشغيل، اضبط خيارات المحوّل البرمجي للسماح باستخدام JavaScript: "allowJs": true.
  6. انسخ ملف package.json المحفوظ إلى الدليل functions، وعدِّله لضبط "main" على "lib/index.js".
  7. في package.json أيضًا، أضِف نصًا برمجيًا للإنشاء خاصًا بلغة TypeScript، مثل ما يلي:

     {
       "name": "functions",
       "scripts": {
         "build": "npm run lint && tsc"
       }
     ...
    
  8. أضِف "typescript" كإحدى التبعيات الخاصة بمرحلة التطوير من خلال تنفيذ npm install --save-dev typescript @typescript-eslint/eslint-plugin @typescript-eslint/parser.

  9. بالنسبة إلى جميع التبعيات، شغِّل npm install --save @types/<dependency>.

  10. أعِد كتابة رمز المصدر من ‎ .js إلى ‎ .ts على النحو المطلوب.

محاكاة دوال TypeScript

لاختبار دوال TypeScript محليًا، يمكنك استخدام أدوات المحاكاة الموضّحة في تشغيل الدوال محليًا. من المهم تجميع الرمز قبل استخدام هذه الأدوات، لذا احرص على تنفيذ npm run build داخل دليل الدوال قبل تنفيذ firebase emulators:start أو firebase functions:shell. بدلاً من ذلك، يمكنك تشغيل 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. يمكنك استخدام خريطة المصدر هذه في بيئة التطوير المتكاملة المفضّلة لديك أو من خلال وحدة Node.