اختبار تطبيقات الويب محليًا باستخدام محاكي "استضافة التطبيقات من Firebase"

يمكنك إجراء اختبارات محلية لتطبيقك قبل App Hostingنشره باستخدام محاكي App Hosting، وهو جزء من مجموعة أدوات المحاكاة المحلية لمنصة Firebase.

قبل استخدام محاكي App Hosting، تأكَّد من فهم عملية Local Emulator Suite التشغيل العامة في Firebase، وثبِّت Local Emulator Suite وضبطه وراجِع أوامر Local Emulator Suite CLI.

يفترض هذا الموضوع أنّك على دراية بـ App Hosting. إذا لزم الأمر، راجِع مقدمة App Hosting والمواد الأخرى لمساعدتك في فهم آلية عمل App Hosting.

ما الذي يمكنني فعله باستخدام محاكي App Hosting؟

يتيح لك محاكي App Hosting اختبار تطبيقات الويب وتحسينها على الجهاز. يمكن أن يؤدي ذلك إلى تبسيط عملية التطوير وتحسين جودة تطبيقات الويب التي تم إنشاؤها باستخدام Firebase ونشرها على App Hosting.

محاكي App Hosting:

  1. يتيح لك تشغيل تطبيق الويب على جهازك، مع متغيّرات البيئة المحدّدة في ملفات إعدادات apphosting.yaml.
  2. يمكنه تصدير الأسرار التي حفظتها في App Hosting بيئاتك المختلفة، ما يتيح لك محاكاة التطبيقات في بيئات مختلفة.
  3. يمكن استخدامه مع محاكيات Firebase الأخرى. إذا كنت تستخدم Firestore أو Auth أو أي محاكي آخر، يضمن Local Emulator Suite بدء تشغيل هذه المحاكيات أولاً قبل محاكي App Hosting.

ضبط المحاكي

للبدء، ثبِّت Local Emulator Suite وأدخِله كما هو موضّح في مقالة تثبيت حزمة Local Emulator Suite وضبطها ودمجها. بالإضافة إلى أي محاكيات Firebase أخرى تريد إعدادها، احرص على اختيار App Hosting Emulator. تطلب منك وحدة تحكّم سطر الأوامر بعض قيم محاكي App Hosting، بما في ذلك:

firebase init emulators
=== Emulators Setup
? Which Firebase emulators do you want to set up? Press Space to select emulators, then Enter to confirm your choices. (Press
<space> to select, <a> to toggle all, <i> to invert selection, and <enter> to proceed)
❯◯ App Hosting Emulator
 ◯ Firestore Emulator
 ◯ Database Emulator
 ◯ Hosting Emulator
 ◯ Pub/Sub Emulator
 ◯ Storage Emulator
 ◯ Eventarc Emulator
(Move up and down to reveal more choices)

? Specify your app's root directory relative to your project (.)

? What configs would you like to export? (Press
<space> to select, <a> to toggle all, <i> to invert selection, and <enter> to proceed)
 ❯◯ Secrets

? Which environment would you like to export secrets from Secret Manager for?:
  ◯ base (apphosting.yaml)
 ❯◯ staging (apphosting.yaml + apphosting.staging.yaml)
  ◯ preview (apphosting.yaml + apphosting.preview.yaml)

i Wrote Secrets as environment variables to apphosting.local.yaml.
i apphosting.local.yaml has been automatically added to your .gitignore.

تُستخدَم أي قيم تقدّمها في عملية الإعداد هذه لتعديل إعدادات App Hosting المحاكي في firebase.json. يمكنك أيضًا ضبط محاكي "استضافة التطبيقات" من خلال تعديل firebase.json مباشرةً. إليك مخطّط محاكي "استضافة التطبيقات":

{
  ...
  "emulators": {
    "apphosting": {
      "startCommandOverride": <command> [optional]
      "rootDirectory": <path> [optional]
      }
    }
  }
  • يتم إنشاء startCommandOverride وضبطه تلقائيًا عند بدء تشغيل المحاكي. في حال عدم تقديمه، سيرصد المحاكي الأمر dev الخاص بمدير الحِزم ويعمل به.
  • يُستخدَم rootDirectory لدعم عمليات إعداد مشاريع المستودعات الموحدة. إذا كان تطبيق الويب في دليل فرعي، عليك تقديم مسار هذا الدليل بالنسبة إلى الدليل الجذر (الموقع الجغرافي لـ firebase.json).

إدارة المحاكاة

يؤدي إعداد المحاكي إلى إنشاء ملف apphosting.local.yaml في الدليل الجذر لتطبيقك. يحتوي ملف الإعداد هذا على المخطّط نفسه المستخدَم في ملف apphosting.yaml المستخدَم في الإنتاج، ولكنّه مخصّص فقط للتطوير على الجهاز. يقرأ المحاكي تلقائيًا الإعدادات من ملف apphosting.yaml، ولكن إذا كان ملف apphosting.local.yaml متوفّرًا، يتم منح الأولوية للإعدادات في هذا الملف.

تصدير الأسرار لمحاكاة بيئات مختلفة محليًا

إذا كنت تعمل مع بيئات متعدّدة وتريد محاكاة بيئات التطبيقات المختلفة على الجهاز، قد تحتاج إلى ملفّات سرّية البيئات المقابلة. يمكنك تصدير الأسرار لبيئة معيّنة باستخدام الأمر CLI apphosting:config:export (بدلاً من ذلك، كما هو موضّح في ضبط المحاكي، يمكنك اختياريًا استيراد الأسرار أثناء بدء المحاكي).

يطلب منك هذا الأمر الاختيار من بين بيئات App Hosting المتاحة لمشروعك. يتم دمج ملف App Hosting الخاص بالبيئة (على سبيل المثال، "apphosting.staging.yaml") وملف App Hosting الأساسي ("apphosting.yaml")، مع إعطاء الأولوية لملف App Hosting الخاص بالبيئة. إذا كانت هناك أسرار تحمل اسمًا مماثلاً في كلتا الإعدادتَين، يتم استخدام السر من الإعداد المخصّص للبيئة.

على سبيل المثال، لتصدير الأسرار إلى المحاكي من بيئة الاختبار:

firebase apphosting:config:export --project <your firebase project Id>

? What configs would you like to export? (Press
<space> to select, <a> to toggle all, <i> to invert selection, and <enter> to proceed)
 ❯◯ Secrets

? Which environment would you like to export secrets from Secret Manager for?:
  ◯ base (apphosting.yaml)
 ❯◯ staging (apphosting.yaml + apphosting.staging.yaml)
  ◯ preview (apphosting.yaml + apphosting.preview.yaml)
i Wrote Secrets as environment variables to apphosting.local.yaml.
i apphosting.local.yaml has been automatically added to your .gitignore.

يتم تعديل ملف apphosting.local.yaml (أو إنشاؤه إذا لم يكن متوفّرًا) بإضافة الأسرار التي تم تصديرها بصفتها متغيّرات بيئة. بما أنّ الملف يحتوي الآن على معلومات حسّاسة في نص عادي، ستتم إضافته تلقائيًا إلىملف .gitignore لمنع إرساله عن طريق الخطأ إلى مستودع الرمز المصدر.

تشغيل المحاكي

firebase emulators:start

سيؤدي ذلك إلى تشغيل جميع المحاكيات المحدّدة في ملف firebase.json، بما في ذلك محاكي App Hosting.