Local Emulator Suite را نصب، پیکربندی و ادغام کنید

مجموعه شبیه ساز محلی Firebase را می توان برای نمونه های اولیه و محیط های آزمایشی مختلف نصب و پیکربندی کرد، از جلسات نمونه سازی یکباره گرفته تا جریان های کاری یکپارچه سازی مداوم در مقیاس تولید.

مجموعه Local Emulator را نصب کنید

قبل از نصب Emulator Suite به موارد زیر نیاز دارید:

  • Node.js نسخه 16.0 یا بالاتر.
  • جاوا JDK نسخه 11 یا بالاتر.

برای نصب Emulator Suite:

  1. Firebase CLI را نصب کنید. اگر قبلاً Firebase CLI را نصب نکرده‌اید، اکنون آن را نصب کنید . برای استفاده از Emulator Suite به CLI نسخه 8.14.0 یا بالاتر نیاز دارید. با استفاده از دستور زیر می توانید بررسی کنید که کدام نسخه را نصب کرده اید:
    firebase --version
  2. اگر قبلاً این کار را انجام نداده اید، دایرکتوری کاری فعلی را به عنوان یک پروژه Firebase مقداردهی کنید و به دنبال اعلان های روی صفحه مشخص کنید که از کدام محصولات استفاده کنید:
    firebase init
  3. مجموعه 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
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/ دانلود می کند اگر قبلاً نصب نشده باشند.
پرچم توضیحات
--only اختیاری. محدود کردن شبیه سازهایی که شروع می شوند. فهرستی از نام‌های شبیه‌ساز جدا شده با کاما ارائه کنید، و یک یا چند مورد از «تأثیر»، «پایگاه داده»، «firestore»، «functions»، «hosting» یا «pubsub» را مشخص کنید.
--inspect-functions debug_port اختیاری. برای فعال کردن اشکال زدایی توابع در پورت مشخص شده (یا پورت پیش فرض 9229 در صورت حذف آرگومان) با شبیه ساز Cloud Functions استفاده کنید. توجه داشته باشید که هنگامی که این پرچم ارائه می شود، شبیه ساز Cloud Functions به حالت اجرای سریالی خاص تغییر می کند که در آن توابع در یک فرآیند واحد، به ترتیب (FIFO) اجرا می شوند. این امر اشکال زدایی تابع را ساده می کند، اگرچه این رفتار با اجرای موازی توابع چند فرآیندی در ابر متفاوت است.
--export-on-exit= اختیاری. با Authentication ، Cloud Firestore ، Realtime Database یا Cloud Storage for 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 اختیاری. با Authentication ، Cloud Firestore ، Realtime Database یا Cloud Storage for Firebase استفاده کنید. داده‌های ذخیره‌شده را با استفاده از گزینه راه‌اندازی --export-on-exit یا emulators:export به یک نمونه در حال اجرا Authentication ، Cloud Firestore ، Realtime Database یا Cloud Storage for Firebase وارد کنید. هر داده ای که در حال حاضر در حافظه شبیه ساز وجود دارد، بازنویسی می شود.
شبیه سازها: scriptpath exec پس از راه‌اندازی شبیه‌سازهای محصولات Firebase که در firebase.json پیکربندی شده‌اند، اسکریپت را در scriptpath اجرا کنید. پس از اتمام اجرای اسکریپت، فرآیندهای شبیه ساز به طور خودکار متوقف می شوند.
پرچم توضیحات
--only اختیاری. محدود کردن شبیه سازهایی که شروع می شوند. فهرستی از نام‌های شبیه‌ساز جدا شده با کاما ارائه کنید و یک یا چند مورد از «firestore»، «پایگاه داده»، «functions»، «hosting» یا «pubsub» را مشخص کنید.
--inspect-functions debug_port اختیاری. برای فعال کردن اشکال زدایی توابع در پورت مشخص شده (یا پورت پیش فرض 9229 در صورت حذف آرگومان) با شبیه ساز Cloud Functions استفاده کنید. توجه داشته باشید که هنگامی که این پرچم ارائه می شود، شبیه ساز Cloud Functions به حالت اجرای سریالی خاص تغییر می کند که در آن توابع در یک فرآیند واحد، به ترتیب (FIFO) اجرا می شوند. این امر اشکال زدایی تابع را ساده می کند، اگرچه این رفتار با اجرای موازی توابع چند فرآیندی در ابر متفاوت است.
--export-on-exit= اختیاری. با Authentication ، Cloud Firestore ، Realtime Database یا Cloud Storage for 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 اختیاری. با Authentication ، Cloud Firestore ، Realtime Database یا Cloud Storage for Firebase استفاده کنید. داده‌های ذخیره‌شده را با استفاده از گزینه راه‌اندازی --export-on-exit یا emulators:export به یک نمونه در حال اجرا Authentication ، Cloud Firestore ، Realtime Database یا Cloud Storage for Firebase وارد کنید. هر داده ای که در حال حاضر در حافظه شبیه ساز است رونویسی می شود.
--ui اختیاری. در حین اجرا، رابط کاربری Emulator را اجرا کنید.

روش 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 صادر کنید. اگر از قبل وجود نداشته باشد export_directory مشخص شده ایجاد خواهد شد. اگر دایرکتوری مشخص شده وجود داشته باشد، از شما خواسته می شود تا تأیید کنید که داده های صادرات قبلی باید رونویسی شوند. می توانید با استفاده از پرچم --force از این دستور صرف نظر کنید. دایرکتوری صادرات حاوی یک فایل مانیفست داده، firebase-export-metadata.json است.

می‌توانید به شبیه‌سازها دستور دهید هنگام خاموش شدن، داده‌ها را با استفاده از پرچم‌های --export-on-exit که در بالا توضیح داده شد صادر کنند.

با سیستم 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