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

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

نصب مجموعه شبیه‌ساز محلی

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

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

برای نصب مجموعه شبیه‌ساز:

  1. رابط خط فرمان فایربیس ( Firebase CLI) را نصب کنید. اگر هنوز رابط خط فرمان فایربیس را نصب نکرده‌اید، اکنون آن را نصب کنید . برای استفاده از مجموعه شبیه‌ساز (Emulator Suite) به نسخه ۸.۱۴.۰ یا بالاتر رابط خط فرمان نیاز دارید. می‌توانید با استفاده از دستور زیر، نسخه نصب شده را بررسی کنید:
    firebase --version
  2. اگر قبلاً این کار را نکرده‌اید، دایرکتوری کاری فعلی را به عنوان یک پروژه Firebase مقداردهی اولیه کنید و با دنبال کردن دستورالعمل‌های روی صفحه، مشخص کنید که از کدام محصولات استفاده کنید:
    firebase init
  3. مجموعه شبیه‌ساز را راه‌اندازی کنید. این دستور یک ویزارد پیکربندی را آغاز می‌کند که به شما امکان می‌دهد شبیه‌سازهای مورد علاقه خود را انتخاب کنید، فایل‌های باینری شبیه‌ساز مربوطه را دانلود کنید و در صورت مناسب نبودن پورت‌های پیش‌فرض، پورت‌های شبیه‌ساز را تنظیم کنید.
    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/ دانلود می‌کند، اگر قبلاً نصب نشده باشند.
پرچم توضیحات
--only اختیاری. محدود کردن شروع شبیه‌سازها. فهرستی از نام‌های شبیه‌ساز که با کاما از هم جدا شده‌اند، ارائه دهید که یک یا چند مورد از 'auth'، 'database'، 'firestore'، 'functions'، 'hosting' یا 'pubsub' را مشخص کند.
--inspect-functions debug_port اختیاری. با استفاده از شبیه‌ساز 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 که در حال اجرا است، وارد کنید. هر داده‌ای که در حال حاضر در حافظه شبیه‌ساز باشد، رونویسی خواهد شد.
--log-verbosity= verbosity اختیاری. میزان خروجی گزارش‌گیری از شبیه‌سازها را کاهش می‌دهد تا نویز در کنسول و فایل‌های گزارش کاهش یابد. مقادیر معتبر عبارتند از DEBUG، INFO، QUIET، SILENT.
شبیه‌سازها: scriptpath اجرایی اسکریپت را پس از شروع شبیه‌سازها برای محصولات Firebase پیکربندی‌شده در firebase.json در scriptpath اجرا کنید. فرآیندهای شبیه‌ساز پس از پایان اجرای اسکریپت، به‌طور خودکار متوقف می‌شوند.
پرچم توضیحات
--only اختیاری. محدود کردن شروع شبیه‌سازها. فهرستی از نام‌های شبیه‌ساز که با کاما از هم جدا شده‌اند، ارائه دهید که یک یا چند مورد از موارد 'firestore'، 'database'، 'functions'، 'hosting' یا 'pubsub' را مشخص کند.
--inspect-functions debug_port اختیاری. با استفاده از شبیه‌ساز 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 اختیاری. رابط کاربری شبیه‌ساز را در حین اجرا اجرا کنید.
--log-verbosity= verbosity اختیاری. میزان خروجی گزارش‌گیری از شبیه‌سازها را کاهش می‌دهد تا نویز در کنسول و فایل‌های گزارش کاهش یابد. مقادیر معتبر عبارتند از DEBUG، INFO، QUIET، SILENT.

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

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

با سیستم 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 ناموجود ناموجود ناموجود ناموجود