يمكن تثبيت "مجموعة أدوات المحاكاة المحلية" من Firebase وإعدادها لبيئات مختلفة خاصة بالنماذج الأولية والاختبارات، بدءًا من جلسات النماذج الأولية لمرة واحدة إلى سير عمل التكامل المستمر على نطاق الإنتاج.
تثبيت "مجموعة أدوات المحاكاة المحلية"
قبل تثبيت Emulator Suite، ستحتاج إلى ما يلي:
- الإصدار 16.0 من Node.js أو إصدار أحدث
- الإصدار 11 أو إصدار أحدث من حزمة تطوير البرامج (JDK) الخاصة بلغة Java
لتثبيت Emulator Suite، اتّبِع الخطوات التالية:
- ثبِّت Firebase CLI.
إذا لم يسبق لك تثبيت واجهة سطر الأوامر الخاصة بـ Firebase، يمكنك تثبيتها الآن.
يجب استخدام الإصدار 8.14.0 من واجهة سطر الأوامر أو إصدار أحدث لاستخدام Emulator Suite. يمكنك
التحقّق من الإصدار المثبَّت باستخدام الأمر التالي:
firebase --version
- إذا لم يسبق لك إجراء ذلك، عليك تهيئة دليل العمل الحالي كمشروع على Firebase، وذلك باتّباع الطلبات التي تظهر على الشاشة لتحديد المنتجات التي تريد استخدامها:
firebase init
- إعداد "مجموعة أدوات المحاكاة" يبدأ هذا الأمر معالج الإعداد الذي يتيح لك اختيار المحاكيات التي تهمّك وتنزيل ملفات المحاكيات الثنائية ذات الصلة وتحديد منافذ المحاكيات إذا لم تكن الإعدادات التلقائية مناسبة.
firebase init emulators
بعد تثبيت المحاكي، لن يتم إجراء عمليات التحقّق من التحديثات ولن يتم تنزيل أي ملفات إضافية تلقائيًا إلى أن تحدِّث إصدار Firebase CLI.
إعداد "مجموعة أدوات المحاكاة"
يمكنك اختياريًا ضبط منافذ الشبكة الخاصة بالمحاكيات ومسار تعريفات "قواعد الأمان" في ملف firebase.json:
- يمكنك تغيير منافذ المحاكي من خلال تنفيذ
firebase init emulatorsأو تعديلfirebase.jsonيدويًا. - غيِّر المسار إلى تعريفات "قواعد الأمان" من خلال تعديل
firebase.jsonيدويًا.
في حال عدم ضبط هذه الإعدادات، ستستمع المحاكيات إلى المنافذ التلقائية، وسيتم تشغيل المحاكيات Cloud Firestore وRealtime Database وCloud Storage for Firebase مع توفير أمان البيانات المفتوحة.
| الأمر | الوصف |
|---|---|
| init emulators | ابدأ معالج تهيئة المحاكي. تحديد المحاكيات التي سيتم تثبيتها وتحديد إعدادات منفذ المحاكي اختياريًا init emulators غير مدمر، وسيؤدي قبول الإعدادات التلقائية إلى الحفاظ على إعدادات المحاكي الحالية. |
إعدادات المنفذ
يرتبط كل محاكي بمنفذ مختلف على جهازك باستخدام قيمة تلقائية مفضّلة.
| المحاكي | المنفذ التلقائي |
|---|---|
| Authentication | 9099 |
| App Hosting | 5002 |
| Emulator Suite UI | 4000 |
| Cloud Functions | 5001 |
| Eventarc | 9299 |
| Realtime Database | 9000 |
| Cloud Firestore | 8080 |
| Cloud Storage for Firebase | 9199 |
| Firebase Hosting | 5000 |
| Pub/Sub | 8085 |
إعدادات رقم تعريف المشروع
استنادًا إلى طريقة استدعاء المحاكيات، يمكنك تشغيل عدة مثيلات من المحاكي باستخدام أرقام تعريف مختلفة لمشاريع Firebase أو عدة مثيلات من المحاكي لرقم تعريف مشروع معيّن. في مثل هذه الحالات، يتم تشغيل مثيلات المحاكي في بيئة منفصلة.
من الممارسات الجيدة بشكل عام ضبط معرّف مشروع واحد لجميع عمليات استدعاء المحاكي، حتى يتمكّن Emulator Suite UI ومحاكيات المنتجات المختلفة وجميع مثيلات المحاكي قيد التشغيل من التواصل بشكل صحيح في جميع الحالات.
تعرض Local Emulator Suite تحذيرات عند رصد أرقام تعريف مشاريع متعدّدة في البيئة، ولكن يمكنك تجاهل هذا السلوك من خلال ضبط المفتاح singleProjectMode على false في firebase.json.
يمكنك التحقّق من بيانات تعريف أرقام تعريف المشاريع بحثًا عن حالات عدم تطابق في ما يلي:
- المشروع التلقائي في سطر الأوامر سيتم تلقائيًا الحصول على رقم تعريف المشروع عند بدء التشغيل من المشروع الذي تم اختياره باستخدام
firebase initأوfirebase use. لعرض قائمة المشاريع (ومعرفة المشروع المحدّد)، استخدِمfirebase projects:list. - اختبارات وحدات القواعد يتم غالبًا تحديد رقم تعريف المشروع في طلبات إلى طرق مكتبة Rules
Unit Testing
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 for Firebase إلى Java، ويمكن تخصيصها باستخدام علامات JVM من خلال متغيّر البيئة JAVA_TOOL_OPTIONS.
على سبيل المثال، إذا واجهت أخطاء متعلقة بمساحة الذاكرة المؤقتة في Java، يمكنك زيادة الحد الأقصى لمساحة الذاكرة المؤقتة في Java إلى 4 غيغابايت:
export JAVA_TOOL_OPTIONS="-Xmx4g"
firebase emulators:start
يمكن تحديد علامات متعددة بين علامتَي اقتباس مفصولة بمسافات، مثل
JAVA_TOOL_OPTIONS="-Xms2g -Xmx4g". لا تؤثر العلامات إلا في المكوّنات المستندة إلى Java في المحاكيات، وليس لها أي تأثير في الأجزاء الأخرى من واجهة سطر الأوامر Firebase، مثل Emulator Suite UI.
بدء تشغيل المحاكيات
يمكنك بدء المحاكيات لتشغيلها إلى أن يتم إيقافها يدويًا، أو لتشغيلها لمدة نص برمجي محدّد للاختبار ثم إيقافها تلقائيًا.
| الأمر | الوصف | ||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| emulators:start | ابدأ المحاكيات لمنتجات Firebase التي تم إعدادها في firebase.json.
ستستمر عمليات المحاكي في العمل إلى أن يتم إيقافها بشكلٍ صريح. سيؤدي تنفيذ الأمر Calling
emulators:start إلى تنزيل المحاكيات إلى المسار ~/.cache/firebase/emulators/ إذا لم تكن مثبّتة من قبل.
|
||||||||||||||
| emulators:exec scriptpath | نفِّذ النص البرمجي في scriptpath بعد بدء المحاكيات لمنتجات Firebase
التي تم ضبطها في firebase.json. سيتم إيقاف عمليات المحاكي تلقائيًا عند انتهاء تنفيذ النص البرمجي.
|
تكون الطريقة firebase emulators:exec أكثر ملاءمة بشكل عام لسير عمل الدمج المتواصل.
تصدير بيانات المحاكي واستيرادها
يمكنك تصدير البيانات من المحاكيات Authentication وCloud Firestore وRealtime Database وCloud Storage for Firebase لاستخدامها كمجموعة بيانات أساسية مشتركة وقابلة للمشاركة. يمكن استيراد مجموعات البيانات هذه باستخدام العلامة --import، كما هو موضّح أعلاه.
| emulators:export export_directory |
Authentication أو Cloud Firestore أو Realtime Database أو Cloud Storage for Firebase
تصدير البيانات من مثيل محاكي Cloud Firestore أو Realtime Database أو Cloud Storage for Firebase قيد التشغيل سيتم إنشاء
يمكنك توجيه المحاكيات لتصدير البيانات تلقائيًا عند إيقافها باستخدام علامات |
التكامل مع نظام التكامل المستمر
تشغيل صور "مجموعة أدوات المحاكاة" المستندة إلى الحاويات
تتسم عملية تثبيت Emulator Suite وضبطها باستخدام الحاويات في عملية إعداد نموذجية لعملية الدمج المتواصل بالسهولة.
في ما يلي بعض المشاكل التي يجب أخذها في الاعتبار:
يتم تثبيت ملفات JAR وتخزينها مؤقتًا في
~/.cache/firebase/emulators/.- ننصحك بإضافة هذا المسار إلى إعدادات التخزين المؤقت لعملية الدمج المتواصل لتجنُّب عمليات التنزيل المتكرّرة.
إذا لم يكن لديك ملف
firebase.jsonفي المستودع، عليك إضافة وسيطة سطر أوامر إلى الأمرemulators:startأوemulators:execلتحديد المحاكيات التي يجب بدء تشغيلها. على سبيل المثال:--only functions,firestore.
إنشاء رمز مميّز للمصادقة (محاكي الاستضافة فقط)
إذا كانت مهام سير العمل الخاصة بالتكامل المستمر تعتمد على Firebase Hosting، عليك تسجيل الدخول باستخدام رمز مميّز لتشغيل firebase emulators:exec. لا تتطلّب المحاكيات الأخرى تسجيل الدخول.
لإنشاء رمز مميّز، شغِّل firebase login:ci في بيئتك المحلية. يجب عدم تنفيذ ذلك من نظام CI. اتّبِع التعليمات لإثبات الهوية. لن تحتاج إلى تنفيذ هذه الخطوة إلا مرة واحدة لكل مشروع، لأنّ الرمز المميّز سيكون صالحًا في جميع الإصدارات. يجب التعامل مع الرمز المميز مثل كلمة المرور، لذا احرص على الحفاظ على سرّيته.
إذا كانت بيئة التكامل المستمر (CI) تتيح لك تحديد متغيّرات بيئة يمكن استخدامها في نصوص البرامج الإنشائية، ما عليك سوى إنشاء متغيّر بيئة باسم FIREBASE_TOKEN، وتكون قيمته هي سلسلة رمز الدخول. ستتعرّف واجهة سطر الأوامر (CLI) في Firebase تلقائيًا على متغيّر البيئة 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 تعمل في محاكيَي Cloud Functions أو Extensions.
لإيقاف مشغّلات الدوال المحلية مؤقتًا، أرسِل طلب PUT إلى نقطة النهاية /functions/disableBackgroundTriggers في Emulator Hub.
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) لمحاكي Android
تشير الجداول في هذا القسم إلى المحاكيات المتوافقة مع حِزم تطوير البرامج (SDK) الخاصة بالعميل والمشرف. يشير في المستقبل إلى أنّه من المخطّط توفير إمكانية استخدام المحاكي، ولكنّها غير متاحة بعد.
توفُّر حزمة تطوير البرامج (SDK) للعميل
| Android | منصات Apple | الويب |
Firebase UI Android |
Firebase UI iOS |
Firebase UI الويب |
|
|---|---|---|---|---|---|---|
| Realtime Database | 19.4.0 | 7.2.0 | 8.0.0 | 6.4.0 | صيغة المستقبل | لا ينطبق |
| Cloud Firestore | 21.6.0 | 7.2.0 | 8.0.0 | 6.4.0 | صيغة المستقبل | لا ينطبق |
| Authentication | 20.0.0 | 7.0.0 | 8.0.0 | 7.0.0 | صيغة المستقبل | 4.7.2 |
| Cloud Storage for Firebase | 20.0.0 | 8.0.0 | 8.4.0 | 7.0.0 | 11.0.0 | لا ينطبق |
| Cloud Functions | 19.1.0 | 7.2.0 | 8.0.0 | لا ينطبق | غير متاح | غير متاح |
| Hosting | غير متاح | غير متاح | غير متاح | غير متاح | غير متاح | غير متاح |
| Extensions | غير متاح | غير متاح | غير متاح | غير متاح | غير متاح | لا ينطبق |
مدى توفّر حزمة تطوير البرامج (SDK) للمشرف
| Node | Java | Python | Go | |
|---|---|---|---|---|
| Realtime Database | 8.6.0 | 6.10.0 | 2.18.0 | صيغة المستقبل |
| Cloud Firestore | 8.0.0 | 6.10.0 | 3.0.0 | 1.0.0 |
| Authentication | 9.3.0 | 7.2.0 | 5.0.0 | 4.2.0 |
| Cloud Storage for Firebase | 9.8.0 | صيغة المستقبل | صيغة المستقبل | صيغة المستقبل |
| Cloud Functions | لا ينطبق | غير متاح | غير متاح | غير متاح |
| Hosting | غير متاح | غير متاح | غير متاح | غير متاح |
| Extensions | غير متاح | غير متاح | غير متاح | لا ينطبق |