مجموعه شبیه ساز محلی Firebase را می توان برای نمونه های اولیه و محیط های آزمایشی مختلف نصب و پیکربندی کرد، از جلسات نمونه سازی یکباره گرفته تا جریان های کاری یکپارچه سازی مداوم در مقیاس تولید.
مجموعه Local Emulator را نصب کنید
قبل از نصب Emulator Suite به موارد زیر نیاز دارید:
برای نصب Emulator Suite:
- Firebase CLI را نصب کنید. اگر قبلاً Firebase CLI را نصب نکردهاید، اکنون آن را نصب کنید . برای استفاده از Emulator Suite به CLI نسخه 8.14.0 یا بالاتر نیاز دارید. با استفاده از دستور زیر می توانید بررسی کنید که کدام نسخه را نصب کرده اید:
firebase --version
- اگر قبلاً این کار را انجام نداده اید، دایرکتوری کاری فعلی را به عنوان یک پروژه Firebase مقداردهی کنید و به دنبال اعلان های روی صفحه مشخص کنید که از کدام محصولات استفاده کنید:
firebase init
- مجموعه Emulator را راه اندازی کنید. این دستور یک جادوگر پیکربندی را راهاندازی میکند که به شما امکان میدهد شبیهسازهای مورد علاقه را انتخاب کنید، فایلهای باینری شبیهساز مربوطه را دانلود کنید و اگر پیشفرضها مناسب نیستند، پورتهای شبیهساز را تنظیم کنید.
firebase init emulators
پس از نصب یک شبیهساز، تا زمانی که نسخه Firebase CLI خود را بهروزرسانی نکنید، هیچ بررسی بهروزرسانی انجام نمیشود و هیچ بارگیری خودکار اضافی انجام نمیشود.
مجموعه شبیه ساز را پیکربندی کنید
می توانید به صورت اختیاری پورت های شبکه شبیه سازها و مسیر تعاریف قوانین امنیتی را در فایل firebase.json
پیکربندی کنید:
- با اجرای
firebase init emulators
یا با ویرایش دستیfirebase.json
، پورت های شبیه ساز را تغییر دهید. - با ویرایش دستی
firebase.json
، مسیر تعاریف قوانین امنیتی را تغییر دهید.
اگر این تنظیمات را پیکربندی نکنید، شبیهسازها به درگاههای پیشفرض خود گوش میدهند و شبیهسازهای Cloud Firestore ، Realtime Database و Cloud Storage for Firebase با امنیت داده باز اجرا میشوند.
فرمان | توضیحات |
---|---|
شبیه سازهای init | یک ویزارد اولیه شبیه ساز را راه اندازی کنید. شبیه سازهایی که باید نصب شوند را شناسایی کنید و به صورت اختیاری تنظیمات پورت شبیه ساز را مشخص کنید. init emulators غیر مخرب است. پذیرش پیش فرض ها، پیکربندی شبیه ساز فعلی را حفظ می کند. |
پیکربندی پورت
هر شبیه ساز به پورت دیگری در دستگاه شما با مقدار پیش فرض ترجیحی متصل می شود.
شبیه ساز | پورت پیش فرض |
---|---|
Authentication | 9099 |
App Hosting | 5002 |
Emulator Suite UI | 4000 |
Cloud Functions | 5001 |
رویدادارک | 9299 |
Realtime Database | 9000 |
Cloud Firestore | 8080 |
Cloud Storage for Firebase | 9199 |
Firebase Hosting | 5000 |
Pub/Sub | 8085 |
پیکربندی شناسه پروژه
بسته به نحوه فراخوانی شبیهسازها، میتوانید چندین نمونه از یک شبیهساز را با استفاده از شناسههای پروژه Firebase مختلف یا چندین نمونه شبیهساز برای یک ID پروژه معین اجرا کنید. در چنین مواردی، نمونه های شبیه ساز در یک محیط جداگانه اجرا می شوند.
به طور کلی، تنظیم یک شناسه پروژه برای همه فراخوانیهای شبیهساز، تمرین خوبی است، بنابراین Emulator Suite UI ، شبیهسازهای محصول مختلف و همه نمونههای در حال اجرا یک شبیهساز خاص میتوانند در همه موارد به درستی ارتباط برقرار کنند.
Local Emulator Suite زمانی که چندین ID پروژه را در محیط شناسایی میکند، هشدار میدهد، اگرچه میتوانید با تنظیم کلید 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"
}
}
}
تعیین گزینه های جاوا
شبیهساز Realtime Database ، شبیهساز Cloud Firestore و بخشی از شبیهساز Cloud Storage for Firebase مبتنی بر جاوا هستند که میتوانند با پرچمهای JVM از طریق متغیر محیطی JAVA_TOOL_OPTIONS
سفارشیسازی شوند.
به عنوان مثال، اگر با خطاهای مربوط به فضای پشته جاوا مواجه شدید، می توانید حداکثر اندازه هپ جاوا را به 4 گیگابایت افزایش دهید:
export JAVA_TOOL_OPTIONS="-Xmx4g"
firebase emulators:start
چندین پرچم را می توان در نقل قول هایی که با فاصله از هم جدا شده اند، مشخص کرد، مانند JAVA_TOOL_OPTIONS="-Xms2g -Xmx4g"
. پرچمها فقط بر مؤلفههای شبیهساز مبتنی بر جاوا تأثیر میگذارند و تأثیری بر سایر بخشهای Firebase CLI، مانند Emulator Suite UI ندارند.
شبیه سازها را راه اندازی کنید
میتوانید شبیهسازها را شروع کنید تا تا زمانی که به صورت دستی خاتمه داده شود، اجرا شوند، یا برای مدت زمان یک اسکریپت آزمایشی تعیینشده اجرا شوند و سپس به طور خودکار خاموش شوند.
فرمان | توضیحات | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
شبیه سازها: شروع | شبیه سازها را برای محصولات Firebase پیکربندی شده در firebase.json شروع کنید. فرآیندهای شبیه ساز تا زمانی که به طور صریح متوقف شوند به اجرا ادامه خواهند داد. فراخوانی emulators:start شبیه سازها را در ~/.cache/firebase/emulators/ دانلود می کند اگر قبلاً نصب نشده باشند.
| ||||||||||||
شبیه سازها: scriptpath exec | پس از راهاندازی شبیهسازهای محصولات Firebase که در firebase.json پیکربندی شدهاند، اسکریپت را در scriptpath اجرا کنید. پس از اتمام اجرای اسکریپت، فرآیندهای شبیه ساز به طور خودکار متوقف می شوند.
|
روش 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 صادر کنید. اگر از قبل وجود نداشته باشد میتوانید به شبیهسازها دستور دهید هنگام خاموش شدن، دادهها را با استفاده از پرچمهای |
با سیستم CI خود یکپارچه شوید
در حال اجرای تصاویر مجموعه شبیه ساز کانتینری
نصب و پیکربندی مجموعه Emulator با کانتینرها در یک راه اندازی معمولی CI ساده است.
چند موضوع قابل توجه است:
فایلهای JAR در
~/.cache/firebase/emulators/
نصب و ذخیره میشوند.- ممکن است بخواهید این مسیر را به پیکربندی کش CI خود اضافه کنید تا از دانلودهای مکرر جلوگیری کنید.
اگر فایل
firebase.json
در مخزن خود ندارید، باید یک آرگومان خط فرمان به دستورemulators:start
یاemulators:exec
اضافه کنید تا مشخص کنید کدام شبیه سازها باید راه اندازی شوند. به عنوان مثال،
--only functions,firestore
.
ایجاد یک نشانه تأیید اعتبار (فقط شبیه ساز میزبانی)
اگر گردشهای کاری یکپارچهسازی مداوم شما به Firebase Hosting متکی است، برای اجرای 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
که در شبیهسازهای 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 شبیه ساز
جداول این بخش نشان می دهد که کدام شبیه سازها توسط Client و Admin SDK پشتیبانی می شوند. آینده به این معنی است که پشتیبانی شبیه ساز برنامه ریزی شده است اما هنوز در دسترس نیست.
در دسترس بودن SDK کلاینت
اندروید | پلتفرم های اپل | وب | رابط کاربری Firebase اندروید | رابط کاربری Firebase iOS | رابط کاربری Firebase وب | |
---|---|---|---|---|---|---|
Realtime Database | 19.4.0 | 7.2.0 | 8.0.0 | 6.4.0 | آینده | N/A |
Cloud Firestore | 21.6.0 | 7.2.0 | 8.0.0 | 6.4.0 | آینده | N/A |
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 | N/A |
Cloud Functions | 19.1.0 | 7.2.0 | 8.0.0 | N/A | N/A | N/A |
Hosting | N/A | N/A | N/A | N/A | N/A | N/A |
Extensions | N/A | N/A | N/A | N/A | N/A | N/A |
در دسترس بودن Admin SDK
گره | جاوا | پایتون | برو | |
---|---|---|---|---|
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 | N/A | N/A | N/A | N/A |
Hosting | N/A | N/A | N/A | N/A |
Extensions | N/A | N/A | N/A | N/A |