Catch up on highlights from Firebase at Google I/O 2023. Learn more

تثبيت وتكوين ودمج Local Emulator Suite

يمكن تثبيت Firebase Local Emulator Suite وتهيئته لنماذج أولية مختلفة وبيئات الاختبار ، أي شيء من جلسات النماذج الأولية لمرة واحدة إلى تدفقات عمل التكامل المستمر على نطاق الإنتاج.

قم بتثبيت Local Emulator Suite

قبل تثبيت Emulator Suite ، ستحتاج إلى:

  • إصدار Node.js 16.0 أو أعلى.
  • Java JDK الإصدار 11 أو أعلى.

لتثبيت Emulator Suite:

  1. قم بتثبيت Firebase CLI . إذا لم يكن لديك Firebase CLI مثبتًا بالفعل ، فثبته الآن . ستحتاج إلى إصدار CLI 8.14.0 أو أعلى لاستخدام Emulator Suite. يمكنك التحقق من الإصدار الذي قمت بتثبيته باستخدام الأمر التالي:
    firebase --version
  2. إذا لم تكن قد قمت بذلك بالفعل ، فقم بتهيئة دليل العمل الحالي كمشروع Firebase ، باتباع المطالبات التي تظهر على الشاشة لتحديد المنتجات التي يجب استخدامها:
    firebase init
  3. قم بإعداد Emulator Suite. يبدأ هذا الأمر معالج التكوين الذي يتيح لك تحديد برامج محاكاة الاهتمام وتنزيل ملفات المحاكي الثنائية المقابلة وتعيين منافذ المحاكي إذا كانت الإعدادات الافتراضية غير مناسبة.
    firebase init emulators

بمجرد تثبيت المحاكي ، لا يتم إجراء أي عمليات فحص للتحديث ولن تحدث تنزيلات تلقائية إضافية حتى تقوم بتحديث إصدار Firebase CLI الخاص بك.

تكوين مجموعة المحاكي

يمكنك بشكل اختياري تكوين منافذ الشبكة الخاصة بالمحاكيات والمسار إلى تعريفات قواعد الأمان في ملف firebase.json :

  • قم بتغيير منافذ المحاكي عن طريق تشغيل firebase init emulators أو عن طريق تحرير firebase.json يدويًا.
  • قم بتغيير المسار إلى تعريفات قواعد الأمان عن طريق تحرير firebase.json يدويًا.

إذا لم تقم بتكوين هذه الإعدادات ، فستستمع المحاكيات على منافذها الافتراضية ، وستعمل محاكيات Cloud Firestore و Realtime Database و Cloud Storage for Firebase بأمان بيانات مفتوح.

يأمر وصف
محاكيات البادئة بدء معالج تهيئة المحاكي. حدد المحاكيات المراد تثبيتها وحدد إعدادات منفذ المحاكي اختياريًا. init emulators غير مدمرة ؛ قبول الإعدادات الافتراضية سيحافظ على تكوين المحاكي الحالي.

تكوين المنفذ

يرتبط كل محاكي بمنفذ مختلف على جهازك بقيمة افتراضية مفضلة.

محاكي المنفذ الافتراضي
المصادقة 9099
واجهة مستخدم جناح المحاكي 4000
وظائف السحابة 5001
ايفنتارك 9299
قاعدة بيانات الوقت الفعلي 9000
سحابة Firestore 8080
التخزين السحابي لـ Firebase 9199
استضافة Firebase 5000
حانة / فرعي 8085

تكوين معرف المشروع

اعتمادًا على كيفية استدعاء المحاكيات ، يمكنك تشغيل مثيلات متعددة من المحاكي باستخدام معرفات مشروع Firebase مختلفة أو مثيلات محاكاة متعددة لمعرف مشروع معين. في مثل هذه الحالات ، تعمل مثيلات المحاكي في بيئة منفصلة.

من الممارسات الجيدة بشكل عام تعيين معرّف مشروع واحد لجميع استدعاءات المحاكي ، لذلك يمكن لواجهة مستخدم Emulator Suite ومحاكيات المنتج المختلفة وجميع مثيلات تشغيل محاكي معين التواصل بشكل صحيح في جميع الحالات.

يصدر Local Emulator Suite تحذيرات عندما يكتشف عدة معرفات مشروع في البيئة ، على الرغم من أنه يمكنك تجاوز هذا السلوك عن طريق تعيين مفتاح singleProjectMode على false في firebase.json .

يمكنك التحقق من تصريح (بيانات) معرّف المشروع بحثًا عن عدم التطابق في:

  • المشروع الافتراضي في سطر الأوامر. بشكل افتراضي ، سيتم أخذ معرّف المشروع عند بدء التشغيل من المشروع المحدد باستخدام firebase init أو firebase use . لعرض قائمة المشاريع (ومعرفة أيها تم تحديده) ، استخدم firebase projects:list .
  • اختبارات وحدة القواعد. غالبًا ما يتم تحديد معرّف المشروع في الاستدعاءات إلى أساليب مكتبة اختبار وحدة القواعد initializeTestEnvironment أو initializeTestApp .
  • سطر الأوامر --project علامة المشروع. يتجاوز تمرير Firebase CLI --project علامة المشروع المشروع الافتراضي. ستحتاج إلى التأكد من تطابق قيمة العلامة مع معرّف المشروع في اختبارات الوحدة وتهيئة التطبيق.

تحقق أيضًا من تكوينات معرف المشروع الخاصة بالنظام الأساسي التي قمت بتعيينها أثناء تكوين أنظمة Apple الأساسية و Android ومشاريع الويب .

تكوين قواعد الأمان

سوف تأخذ المحاكيات تكوين قواعد الأمان من database ، firestore ومفاتيح تكوين storage في firebase.json .

{
  // Existing firebase configuration ...
  "database": {
    "rules": "database.rules.json"
  },
  "firestore": {
    "rules": "firestore.rules"
  },
  "storage": {
    "rules": "storage.rules"
  }

  // ...

  // Optional emulator configuration. Default
  // values are used if absent.
  "emulators": {
    "singleProjectMode": false, // do not warn on detection of multiple project IDs
    "firestore": {
      "port": "8080"
    },
    "ui": {
      "enabled": true,      // Default is `true`
      "port": 4000          // If unspecified, see CLI log for selected port
    },
    "auth": {
      "port": "9099"
    },
    "pubsub": {
      "port": "8085"
    }
  }
}

تحديد خيارات Java

يعتمد محاكي Realtime Database ومحاكي Cloud Firestore وجزء من Cloud Storage لمحاكي Firebase على Java ، والتي يمكن تخصيصها باستخدام أعلام JVM عبر متغير البيئة JAVA_TOOL_OPTIONS .

على سبيل المثال ، إذا واجهت أخطاء تتعلق بمساحة كومة Java ، فيمكنك زيادة الحد الأقصى لحجم كومة Java إلى 4 جيجابايت:

export JAVA_TOOL_OPTIONS="-Xmx4g"
firebase emulators:start

يمكن تحديد علامات متعددة في علامات اقتباس مفصولة بمسافات ، مثل JAVA_TOOL_OPTIONS="-Xms2g -Xmx4g" . تؤثر العلامات فقط على المكونات المستندة إلى Java للمحاكيات وليس لها أي تأثير على أجزاء أخرى من Firebase CLI ، مثل Emulator Suite UI.

بدء تشغيل برامج محاكاة

يمكنك بدء تشغيل المحاكيات حتى يتم إنهاؤها يدويًا ، أو للتشغيل لمدة نص اختبار معين ثم يتم إيقاف تشغيلها تلقائيًا.

يأمر وصف
المحاكيات: ابدأ ابدأ المحاكيات لمنتجات Firebase المكونة في firebase.json . ستستمر عمليات المحاكي في العمل حتى تتوقف بشكل صريح. emulators:start المحاكيات إلى ~ / .cache / firebase / emulators / إذا لم تكن مثبتة بالفعل.
علَم ديكريبتيون
--only خياري. حدد برامج المحاكاة التي تبدأ. قم بتوفير قائمة مفصولة بفواصل لأسماء المحاكي ، مع تحديد واحد أو أكثر من "المصادقة" أو "قاعدة البيانات" أو "firestore" أو "الوظائف" أو "الاستضافة" أو "pubsub".
--inspect-functions debug_port خياري. استخدم مع محاكي Cloud Functions لتمكين تصحيح أخطاء نقاط التوقف للوظائف في المنفذ المحدد (أو المنفذ الافتراضي 9229 إذا تم حذف الوسيطة). لاحظ أنه عند توفير هذه العلامة ، يتحول محاكي وظائف السحابة إلى وضع تنفيذ تسلسلي خاص يتم فيه تنفيذ الوظائف في عملية واحدة ، بترتيب تسلسلي (FIFO) ؛ يعمل هذا على تبسيط تصحيح أخطاء الوظائف ، على الرغم من اختلاف السلوك عن العمليات المتعددة والتنفيذ المتوازي للوظائف في السحابة.
--export-on-exit= خياري. استخدم مع المصادقة أو Cloud Firestore أو Realtime Database أو Cloud Storage لمحاكي Firebase. قم بإرشاد المحاكي (المحاكيات) لتصدير البيانات إلى دليل عند حدوث الإغلاق ، كما هو موضح emulators:export . يمكن تحديد دليل التصدير بهذه العلامة: firebase emulators:start --export-on-exit=./saved-data . إذا تم استخدام --import ، فإن مسار التصدير يكون افتراضيًا ؛ على سبيل المثال: firebase emulators:start --import=./data-path --export-on-exit . أخيرًا ، إذا رغبت في ذلك ، قم بتمرير مسارات دليل مختلفة إلى علامتي --import و --export-on-exit .
--import= import_directory خياري. استخدم مع المصادقة أو Cloud Firestore أو Realtime Database أو Cloud Storage لمحاكي Firebase. قم باستيراد البيانات المحفوظة باستخدام خيار بدء التشغيل --export-on-exit أو emulators:export إلى مثيل مصادقة قيد التشغيل أو Cloud Firestore أو Realtime Database أو Cloud Storage for Firebase emulator. سيتم الكتابة فوق أي بيانات موجودة في ذاكرة المحاكي حاليًا.
برامج محاكاة: exec scriptpath قم بتشغيل البرنامج النصي في scriptpath بعد بدء المحاكيات لمنتجات Firebase المكونة في firebase.json . ستتوقف عمليات المحاكي تلقائيًا عند انتهاء تشغيل البرنامج النصي.
علَم ديكريبتيون
--only خياري. حدد برامج المحاكاة التي تبدأ. قم بتوفير قائمة مفصولة بفواصل لأسماء المحاكي ، مع تحديد واحد أو أكثر من "firestore" أو "database" أو "function" أو "hosting" أو "pubsub".
--inspect-functions debug_port خياري. استخدم مع محاكي Cloud Functions لتمكين تصحيح أخطاء نقاط التوقف للوظائف في المنفذ المحدد (أو المنفذ الافتراضي 9229 إذا تم حذف الوسيطة). لاحظ أنه عند توفير هذه العلامة ، يتحول محاكي وظائف السحابة إلى وضع تنفيذ تسلسلي خاص يتم فيه تنفيذ الوظائف في عملية واحدة ، بترتيب تسلسلي (FIFO) ؛ يعمل هذا على تبسيط تصحيح أخطاء الوظائف ، على الرغم من اختلاف السلوك عن العمليات المتعددة والتنفيذ المتوازي للوظائف في السحابة.
--export-on-exit= خياري. استخدم مع المصادقة أو Cloud Firestore أو Realtime Database أو Cloud Storage لمحاكي Firebase. قم بإرشاد المحاكي (المحاكيات) لتصدير البيانات إلى دليل عند حدوث الإغلاق ، كما هو موضح emulators:export . يمكن تحديد دليل التصدير بهذه العلامة: firebase emulators:start --export-on-exit=./saved-data . إذا تم استخدام --import ، فإن مسار التصدير يكون افتراضيًا ؛ على سبيل المثال: firebase emulators:start --import=./data-path --export-on-exit . أخيرًا ، إذا رغبت في ذلك ، قم بتمرير مسارات دليل مختلفة إلى علامتي --import و --export-on-exit .
--import= import_directory خياري. استخدم مع المصادقة أو Cloud Firestore أو Realtime Database أو Cloud Storage لمحاكي Firebase. قم باستيراد البيانات المحفوظة باستخدام خيار بدء التشغيل --export-on-exit أو emulators:export إلى مثيل مصادقة قيد التشغيل أو Cloud Firestore أو Realtime Database أو Cloud Storage for Firebase emulator. سيتم الكتابة فوق أي بيانات موجودة في ذاكرة المحاكي حاليًا.
--ui خياري. قم بتشغيل Emulator UI أثناء التنفيذ.

firebase emulators:exec بشكل عام أكثر ملاءمة لتدفقات عمل التكامل المستمر.

تصدير واستيراد بيانات المحاكي

يمكنك تصدير البيانات من المصادقة و Cloud Firestore و Realtime Database و Cloud Storage لمحاكيات Firebase لاستخدامها كمجموعة بيانات أساسية مشتركة وقابلة للمشاركة. يمكن استيراد مجموعات البيانات هذه باستخدام علامة --import ، كما هو موضح أعلاه.

المحاكيات: export_directory

المصادقة أو Cloud Firestore أو Realtime Database أو Cloud Storage لمحاكي Firebase . تصدير البيانات من مثيل Cloud Firestore قيد التشغيل أو Realtime Database أو Cloud Storage for Firebase emulator. سيتم إنشاء export_directory المحدد إذا لم يكن موجودًا بالفعل. إذا كان الدليل المحدد موجودًا ، فستتم مطالبتك بتأكيد ضرورة الكتابة فوق بيانات التصدير السابقة. يمكنك تخطي هذه المطالبة باستخدام علامة --force . يحتوي دليل التصدير على ملف بيان البيانات ، firebase-export-metadata.json .

يمكنك إرشاد المحاكيات لتصدير البيانات تلقائيًا عند إيقاف تشغيلها باستخدام علامات --export-on-exit الموضحة أعلاه.

التكامل مع نظام CI الخاص بك

تشغيل صور Emulator Suite الحاوية

يعد تثبيت وتكوين Emulator Suite مع الحاويات في إعداد CI نموذجي أمرًا سهلاً.

هناك بعض المشكلات التي يجب ملاحظتها:

  • يتم تثبيت ملفات JAR وتخزينها مؤقتًا في ~/.cache/firebase/emulators/ .

    • قد ترغب في إضافة هذا المسار إلى تكوين ذاكرة التخزين المؤقت CI لتجنب التنزيلات المتكررة.
  • إذا لم يكن لديك ملف firebase.json في المستودع الخاص بك ، فيجب عليك إضافة وسيطة سطر أوامر إلى emulators:start or emulators:exec command لتحديد المحاكيات التي يجب أن تبدأ. على سبيل المثال،
    --only functions,firestore .

إنشاء رمز المصادقة (محاكي الاستضافة فقط)

إذا كانت مهام سير عمل التكامل المستمر تعتمد على استضافة Firebase ، فستحتاج إلى تسجيل الدخول باستخدام رمز مميز لتشغيل firebase emulators:exec . لا تتطلب المحاكيات الأخرى تسجيل الدخول.

لإنشاء رمز مميز ، قم بتشغيل firebase login:ci على بيئتك المحلية ؛ لا ينبغي أن يتم تنفيذ ذلك من نظام CI. اتبع التعليمات للمصادقة. يجب عليك فقط تنفيذ هذه الخطوة مرة واحدة لكل مشروع ، لأن الرمز المميز سيكون صالحًا عبر الإصدارات. يجب التعامل مع الرمز المميز مثل كلمة المرور ؛ تأكد من إبقائها سرية.

إذا كانت بيئة CI الخاصة بك تسمح لك بتحديد متغيرات البيئة التي يمكن استخدامها في البرامج النصية للبناء ، فما عليك سوى إنشاء متغير بيئة يسمى FIREBASE_TOKEN ، مع كون القيمة هي سلسلة رمز الوصول. سيقوم Firebase CLI تلقائيًا بالتقاط متغير البيئة FIREBASE_TOKEN وستبدأ المحاكيات بشكل صحيح.

كحل أخير ، يمكنك ببساطة تضمين الرمز المميز في البرنامج النصي للبناء الخاص بك ، ولكن تأكد من أن الأطراف غير الموثوق بها ليس لديها إمكانية الوصول. بالنسبة لهذا النهج المشفر ، يمكنك إضافة --token "YOUR_TOKEN_STRING_HERE" المنطوق إلى firebase emulators:exec .

استخدم Emulator Hub REST API

قائمة تشغيل المحاكيات

لسرد المحاكيات قيد التشغيل حاليًا ، أرسل طلب GET إلى نقطة نهاية /emulators في Emulator Hub.

curl localhost:4400/emulators

ستكون النتيجة كائن JSON يسرد جميع المحاكيات قيد التشغيل وتكوين المضيف / المنفذ ، على سبيل المثال:

{
  "hub":{
    "name": "hub",
    "host": "localhost",
    "port": 4400
  },
  "functions": {
    "name": "functions",
    "host": "localhost",
    "port": 5001
  }
  "firestore": {
    "name": "firestore",
    "host": "localhost",
    "port": 8080
  }
}

تمكين / تعطيل مشغلات وظيفة الخلفية

في بعض الحالات ، ستحتاج إلى تعطيل مشغلات الوظيفة والإضافة المحلية مؤقتًا. على سبيل المثال ، قد ترغب في حذف جميع البيانات الموجودة في محاكي Cloud Firestore دون تشغيل أي وظائف onDelete تعمل في برامج محاكاة وظائف السحابة أو الإضافات.

لتعطيل مشغلات الوظيفة المحلية مؤقتًا ، أرسل طلب PUT إلى /functions/disableBackgroundTriggers نقطة نهاية لوحة المحاكي.

curl -X PUT localhost:4400/functions/disableBackgroundTriggers

ستكون النتيجة كائن JSON يوضح بالتفصيل الحالة الحالية.

{
  "enabled": false
}

لتمكين مشغلات الوظيفة المحلية بعد تعطيلها ، أرسل طلب PUT إلى /functions/enableBackgroundTriggers نقطة نهاية Emulator Hub.

curl -X PUT localhost:4400/functions/enableBackgroundTriggers

ستكون النتيجة كائن JSON يوضح بالتفصيل الحالة الحالية.

{
  "enabled": true
}

تكامل محاكي SDK

تشير الجداول في هذا القسم إلى المحاكيات التي تدعمها حزم SDK للعميل والمشرف. المستقبل يعني أن دعم المحاكي مخطط ولكنه غير متوفر بعد.

توافر العميل SDK

ذكري المظهر منصات آبل الويب واجهة مستخدم Firebase
ذكري المظهر
واجهة مستخدم Firebase
iOS
واجهة مستخدم Firebase
الويب
قاعدة بيانات الوقت الفعلي 19.4.0 7.2.0 8.0.0 6.4.0 مستقبل غير متاح
سحابة Firestore 21.6.0 7.2.0 8.0.0 6.4.0 مستقبل غير متاح
المصادقة 20.0.0 7.0.0 8.0.0 7.0.0 مستقبل 4.7.2
التخزين السحابي لـ Firebase 20.0.0 8.0.0 8.4.0 7.0.0 11.0.0 غير متاح
وظائف السحابة 19.1.0 7.2.0 8.0.0 غير متاح غير متاح غير متاح
الاستضافة غير متاح غير متاح غير متاح غير متاح غير متاح غير متاح
ملحقات غير متاح غير متاح غير متاح غير متاح غير متاح غير متاح

توافر SDK المسؤول

العقدة جافا بايثون يذهب
قاعدة بيانات الوقت الفعلي 8.6.0 6.10.0 2.18.0 مستقبل
سحابة Firestore 8.0.0 6.10.0 3.0.0 1.0.0
المصادقة 9.3.0 7.2.0 5.0.0 4.2.0
التخزين السحابي لـ Firebase 9.8.0 مستقبل مستقبل مستقبل
وظائف السحابة غير متاح غير متاح غير متاح غير متاح
الاستضافة غير متاح غير متاح غير متاح غير متاح
ملحقات غير متاح غير متاح غير متاح غير متاح