يمكن تثبيت Firebase Local Emulator Suite وتهيئته لنماذج أولية مختلفة وبيئات الاختبار ، أي شيء من جلسات النماذج الأولية لمرة واحدة إلى تدفقات عمل التكامل المستمر على نطاق الإنتاج.
قم بتثبيت Local Emulator Suite
قبل تثبيت Emulator Suite ، ستحتاج إلى:
لتثبيت Emulator Suite:
- قم بتثبيت Firebase CLI . إذا لم يكن لديك Firebase CLI مثبتًا بالفعل ، فثبته الآن . ستحتاج إلى إصدار CLI 8.14.0 أو أعلى لاستخدام Emulator Suite. يمكنك التحقق من الإصدار الذي قمت بتثبيته باستخدام الأمر التالي:
firebase --version
- إذا لم تكن قد قمت بذلك بالفعل ، فقم بتهيئة دليل العمل الحالي كمشروع Firebase ، باتباع المطالبات التي تظهر على الشاشة لتحديد المنتجات التي يجب استخدامها:
firebase init
- قم بإعداد 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 / إذا لم تكن مثبتة بالفعل.
| ||||||||||||
برامج محاكاة: exec scriptpath | قم بتشغيل البرنامج النصي في scriptpath بعد بدء المحاكيات لمنتجات Firebase المكونة في firebase.json . ستتوقف عمليات المحاكي تلقائيًا عند انتهاء تشغيل البرنامج النصي.
|
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. سيتم إنشاء يمكنك إرشاد المحاكيات لتصدير البيانات تلقائيًا عند إيقاف تشغيلها باستخدام علامات |
التكامل مع نظام CI الخاص بك
تشغيل صور Emulator Suite الحاوية
يعد تثبيت وتكوين Emulator Suite مع الحاويات في إعداد CI نموذجي أمرًا سهلاً.
هناك بعض المشكلات التي يجب ملاحظتها:
يتم تثبيت ملفات JAR وتخزينها مؤقتًا في
~/.cache/firebase/emulators/
.- قد ترغب في إضافة هذا المسار إلى تكوين ذاكرة التخزين المؤقت CI لتجنب التنزيلات المتكررة.
إذا لم يكن لديك ملف
firebase.json
في المستودع الخاص بك ، فيجب عليك إضافة وسيطة سطر أوامر إلىemulators:start
oremulators: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 | مستقبل | مستقبل | مستقبل |
وظائف السحابة | غير متاح | غير متاح | غير متاح | غير متاح |
الاستضافة | غير متاح | غير متاح | غير متاح | غير متاح |
ملحقات | غير متاح | غير متاح | غير متاح | غير متاح |