مجموعه شبیهساز محلی فایربیس را میتوان برای محیطهای مختلف نمونهسازی اولیه و آزمایشی، از جلسات نمونهسازی اولیه یکباره گرفته تا گردشهای کاری یکپارچهسازی مداوم در مقیاس تولید، نصب و پیکربندی کرد.
نصب مجموعه شبیهساز محلی
قبل از نصب Emulator Suite به موارد زیر نیاز خواهید داشت:
برای نصب مجموعه شبیهساز:
- رابط خط فرمان فایربیس ( Firebase CLI) را نصب کنید. اگر هنوز رابط خط فرمان فایربیس را نصب نکردهاید، اکنون آن را نصب کنید . برای استفاده از مجموعه شبیهساز (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 | یک ویزارد مقداردهی اولیه شبیهساز را شروع کنید. شبیهسازهایی که باید نصب شوند را شناسایی کنید و به صورت اختیاری تنظیمات پورت شبیهساز را مشخص کنید. init emulators مخرب نیستند؛ پذیرش پیشفرضها، پیکربندی فعلی شبیهساز را حفظ میکند. |
پیکربندی پورت
هر شبیهساز با یک مقدار پیشفرض ترجیحی به پورت متفاوتی روی دستگاه شما متصل میشود.
| شبیهساز | پورت پیشفرض |
|---|---|
| Authentication | ۹۰۹۹ |
| App Hosting | ۵۰۰۲ |
| Emulator Suite UI | ۴۰۰۰ |
| Cloud Functions | ۵۰۰۱ |
| ایونتارک | ۹۲۹۹ |
| Realtime Database | ۹۰۰۰ |
| Cloud Firestore | ۸۰۸۰ |
| Cloud Storage for Firebase | ۹۱۹۹ |
| Firebase Hosting | ۵۰۰۰ |
| Pub/Sub | ۸۰۸۵ عدد |
پیکربندی شناسه پروژه
بسته به نحوه فراخوانی شبیهسازها، ممکن است چندین نمونه از یک شبیهساز را با استفاده از شناسههای پروژه Firebase مختلف یا چندین نمونه شبیهساز برای یک شناسه پروژه مشخص اجرا کنید. در چنین مواردی، نمونههای شبیهساز در یک محیط جداگانه اجرا میشوند.
به طور کلی، تنظیم یک شناسه پروژه برای همه فراخوانیهای شبیهساز، یک روش خوب است، بنابراین Emulator Suite UI ، شبیهسازهای محصول مختلف و همه نمونههای در حال اجرا از یک شبیهساز خاص میتوانند در همه موارد به درستی ارتباط برقرار کنند.
Local Emulator Suite هنگام شناسایی چندین شناسه پروژه در محیط، هشدارهایی صادر میکند، اگرچه میتوانید با تنظیم کلید singleProjectMode روی false در firebase.json خود، این رفتار را نادیده بگیرید.
میتوانید اعلان(های) شناسه پروژه را برای عدم تطابق در موارد زیر بررسی کنید:
- پروژه پیشفرض در خط فرمان. به طور پیشفرض، شناسه پروژه در هنگام راهاندازی از پروژهای که با
firebase initیاfirebase useانتخاب شده است، گرفته میشود. برای مشاهده لیست پروژهها (و دیدن اینکه کدام یک انتخاب شده است) ازfirebase projects:listاستفاده کنید. - تستهای واحد قوانین. شناسه پروژه اغلب در فراخوانی متدهای کتابخانه تست واحد قوانین به
initializeTestEnvironmentیاinitializeTestAppمشخص میشود. - پرچم
--projectدر خط فرمان. ارسال پرچم--projectدر Firebase CLI، پروژه پیشفرض را لغو میکند. باید مطمئن شوید که مقدار این پرچم با شناسه پروژه در تستهای واحد و مقداردهی اولیه برنامه مطابقت دارد.
همچنین پیکربندیهای شناسه پروژه مختص پلتفرم را که هنگام پیکربندی پلتفرمهای اپل ، اندروید و پروژههای وب خود تنظیم کردهاید، بررسی کنید.
پیکربندی قوانین امنیتی
شبیهسازها پیکربندی قوانین امنیتی را از 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 سفارشیسازی شوند.
برای مثال، اگر با خطاهای مربوط به فضای هیپ جاوا مواجه شدید، میتوانید حداکثر اندازه هیپ جاوا را به ۴ گیگابایت افزایش دهید:
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 اجرایی | اسکریپت را پس از شروع شبیهسازها برای محصولات Firebase پیکربندیشده در firebase.json در scriptpath اجرا کنید. فرآیندهای شبیهساز پس از پایان اجرای اسکریپت، بهطور خودکار متوقف میشوند.
|
متد firebase emulators:exec عموماً برای گردشهای کاری یکپارچهسازی مداوم مناسبتر است.
صادرات و واردات دادههای شبیهساز
شما میتوانید دادهها را از شبیهسازهای Authentication ، Cloud Firestore ، Realtime Database و Cloud Storage for Firebase استخراج کنید تا به عنوان یک مجموعه داده پایه مشترک و قابل اشتراکگذاری استفاده شوند. این مجموعه دادهها را میتوان با استفاده از پرچم --import ، همانطور که در بالا توضیح داده شد، وارد کرد.
| شبیهسازها:export export_directory | Authentication ، Cloud Firestore ، Realtime Database یا Cloud Storage for Firebase . دادهها را از یک نمونه در حال اجرا Cloud Firestore ، Realtime Database یا Cloud Storage for Firebase صادر کنید. اگر دایرکتوری شما میتوانید با استفاده از پرچمهای |
با سیستم CI خود ادغام شوید
اجرای ایمیجهای کانتینرشدهی Emulator Suite
نصب و پیکربندی مجموعه شبیهساز با کانتینرها در یک تنظیمات 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 به طور خودکار متغیر محیطی FIREBASE_TOKEN را دریافت میکند و شبیهسازها به درستی شروع به کار میکنند.
به عنوان آخرین راه حل، میتوانید به سادگی توکن را در اسکریپت ساخت خود وارد کنید، اما مطمئن شوید که طرفهای غیرقابل اعتماد به آن دسترسی ندارند. برای این رویکرد کدنویسی شده، میتوانید --token "YOUR_TOKEN_STRING_HERE" به دستور firebase emulators:exec اضافه کنید.
از رابط برنامهنویسی REST هاب شبیهساز استفاده کنید
لیست شبیهسازهای در حال اجرا
برای فهرست کردن شبیهسازهای در حال اجرا، یک درخواست GET به نقطه پایانی /emulators از مرکز شبیهساز ارسال کنید.
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 از مرکز شبیهساز ارسال کنید.
curl -X PUT localhost:4400/functions/disableBackgroundTriggersنتیجه یک شیء JSON خواهد بود که وضعیت فعلی را شرح میدهد.
{
"enabled": false
}
برای فعال کردن تریگرهای تابع محلی پس از غیرفعال شدن آنها، یک درخواست PUT به نقطه پایانی /functions/enableBackgroundTriggers از مرکز شبیهساز ارسال کنید.
curl -X PUT localhost:4400/functions/enableBackgroundTriggersنتیجه یک شیء JSON خواهد بود که وضعیت فعلی را شرح میدهد.
{
"enabled": true
}
ادغام SDK شبیهساز
جداول این بخش نشان میدهد که کدام شبیهسازها توسط SDKهای کلاینت و ادمین پشتیبانی میشوند. منظور از آینده ، پشتیبانی از شبیهساز است که برنامهریزی شده اما هنوز در دسترس نیست.
در دسترس بودن SDK کلاینت
| اندروید | پلتفرمهای اپل | وب | رابط کاربری Firebase اندروید | رابط کاربری Firebase آیاواس | رابط کاربری Firebase وب | |
|---|---|---|---|---|---|---|
| Realtime Database | ۱۹.۴.۰ | ۷.۲.۰ | ۸.۰.۰ | ۶.۴.۰ | آینده | ناموجود |
| Cloud Firestore | ۲۱.۶.۰ | ۷.۲.۰ | ۸.۰.۰ | ۶.۴.۰ | آینده | ناموجود |
| Authentication | ۲۰.۰.۰ | ۷.۰.۰ | ۸.۰.۰ | ۷.۰.۰ | آینده | ۴.۷.۲ |
| Cloud Storage for Firebase | ۲۰.۰.۰ | ۸.۰.۰ | ۸.۴.۰ | ۷.۰.۰ | ۱۱.۰.۰ | ناموجود |
| Cloud Functions | ۱۹.۱.۰ | ۷.۲.۰ | ۸.۰.۰ | ناموجود | ناموجود | ناموجود |
| Hosting | ناموجود | ناموجود | ناموجود | ناموجود | ناموجود | ناموجود |
| Extensions | ناموجود | ناموجود | ناموجود | ناموجود | ناموجود | ناموجود |
در دسترس بودن SDK مدیریت
| گره | جاوا | پایتون | برو | |
|---|---|---|---|---|
| Realtime Database | ۸.۶.۰ | ۶.۱۰.۰ | ۲.۱۸.۰ | آینده |
| Cloud Firestore | ۸.۰.۰ | ۶.۱۰.۰ | ۳.۰.۰ | ۱.۰.۰ |
| Authentication | ۹.۳.۰ | ۷.۲.۰ | ۵.۰.۰ | ۴.۲.۰ |
| Cloud Storage for Firebase | ۹.۸.۰ | آینده | آینده | آینده |
| Cloud Functions | ناموجود | ناموجود | ناموجود | ناموجود |
| Hosting | ناموجود | ناموجود | ناموجود | ناموجود |
| Extensions | ناموجود | ناموجود | ناموجود | ناموجود |