Firebase Local Emulator Suite можно установить и настроить для различных тестовых сред и сред прототипирования, от разовых сеансов прототипирования до рабочих процессов непрерывной интеграции в производственном масштабе.
Установите Local Emulator Suite
Перед установкой Emulator Suite вам потребуется:
Чтобы установить Emulator Suite, выполните следующие действия:
- Установите Firebase CLI.
Если у вас ещё не установлен интерфейс командной строки Firebase, установите его.
Для работы с Emulator Suite требуется CLI версии 8.14.0 или более поздней. Чтобы узнать, какая версия установлена у вас, выполните следующую команду:
firebase --version
- Если вы ещё этого не сделали, инициализируйте текущий рабочий каталог как проект Firebase, следуя инструкциям на экране, чтобы указать, какие продукты использовать:
firebase init
- Настройте Emulator Suite. Эта команда запускает мастер настройки, который позволяет выбрать нужные эмуляторы, скачать соответствующие двоичные файлы эмуляторов и установить порты эмуляторов, если значения по умолчанию не подходят.
firebase init emulators
После установки эмулятора проверки обновлений не выполняются и дополнительные автоматические загрузки не происходят, пока вы не обновите версию интерфейса командной строки Firebase.
Настройте Emulator Suite
При необходимости вы можете настроить сетевые порты эмуляторов и путь к определениям правил безопасности в файле firebase.json:
- Чтобы изменить порты эмулятора, выполните команду
firebase init emulatorsили вручную отредактируйте файлfirebase.json. - Измените путь к определениям правил безопасности, вручную отредактировав
firebase.json.
Если вы не настроите эти параметры, эмуляторы будут прослушивать порты по умолчанию, а эмуляторы Cloud Firestore, Realtime Database и Cloud Storage for Firebase будут работать с открытой защитой данных.
| Команда | Описание |
|---|---|
| init emulators | Запустите мастер инициализации эмулятора. Укажите эмуляторы, которые нужно установить, и при необходимости задайте настройки портов. init emulators не удаляет данные. Если вы примете настройки по умолчанию, текущая конфигурация эмулятора сохранится. |
Конфигурация портов
Каждый эмулятор привязывается к отдельному порту на вашем компьютере с предпочтительным значением по умолчанию.
| Эмулятор | Порт по умолчанию |
|---|---|
| Authentication | 9099 |
| App Hosting | 5002 |
| Emulator Suite UI | 4000 |
| Cloud Functions | 5001 |
| Eventarc | 9299 |
| Realtime Database | 9000 |
| Cloud Firestore | 8080 |
| Cloud Storage for Firebase | 9199 |
| Firebase Hosting | 5000 |
| Pub/Sub | 8085 |
Настройка идентификатора проекта
В зависимости от того, как вы вызываете эмуляторы, вы можете запустить несколько экземпляров эмулятора, используя разные идентификаторы проектов Firebase, или несколько экземпляров эмулятора для одного идентификатора проекта. В таких случаях экземпляры эмулятора запускаются в отдельной среде.
Рекомендуется задать один идентификатор проекта для всех вызовов эмулятора, чтобы Emulator Suite UI, эмуляторы разных продуктов и все запущенные экземпляры определенного эмулятора могли правильно взаимодействовать во всех случаях.
Если 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 for Firebase основаны на Java, поэтому их можно настраивать с помощью флагов JVM через переменную среды JAVA_TOOL_OPTIONS.
Например, если у вас возникают ошибки, связанные с объемом динамически распределяемой памяти Java, вы можете увеличить ее максимальный размер до 4 ГБ:
export JAVA_TOOL_OPTIONS="-Xmx4g"
firebase emulators:start
Несколько флагов можно указать в кавычках через пробел, например JAVA_TOOL_OPTIONS="-Xms2g -Xmx4g". Флаги влияют только на компоненты эмуляторов на основе Java и не влияют на другие части CLI Firebase, такие как Emulator Suite UI.
Запустите эмуляторы
Вы можете запустить эмуляторы, чтобы они работали до тех пор, пока не будут остановлены вручную, или чтобы они работали в течение указанного тестового скрипта, а затем автоматически завершали работу.
| Команда | Описание | ||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
emulators:start
|
Запустите эмуляторы для продуктов Firebase, настроенных в
|
||||||||||||||
emulators:exec PATH/TO/SCRIPT
|
Запустите скрипт в PATH/TO/SCRIPT после запуска эмуляторов для продуктов Firebase, настроенных в
|
Метод 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. Если указанный объект
Вы можете настроить эмуляторы так, чтобы они автоматически экспортировали данные при завершении работы. Для этого используйте флаги |
Интеграция с системой непрерывной интеграции
Запуск контейнеризированных образов Emulator Suite
Установка и настройка Emulator Suite с контейнерами в типичной среде непрерывной интеграции не представляет сложности.
Обратите внимание на следующее:
Файлы JAR устанавливаются и кешируются в папке
~/.cache/firebase/emulators/.- Чтобы избежать повторных скачиваний, вы можете добавить этот путь в конфигурацию кеша непрерывной интеграции.
Если в репозитории нет файла
firebase.json, добавьте аргумент командной строки в командуemulators:startилиemulators:exec, чтобы указать, какие эмуляторы нужно запустить. Пример:--only functions,firestore.
Сгенерируйте токен аутентификации (только для эмулятора Hosting)
Если ваши рабочие процессы непрерывной интеграции зависят от Firebase Hosting , то для запуска firebase emulators:exec вам нужно будет войти в систему с помощью токена. Для работы с другими эмуляторами вход в аккаунт не требуется.
Чтобы сгенерировать токен, запустите firebase login:ci в локальной среде. Не делайте этого в системе непрерывной интеграции. Следуйте инструкциям, чтобы выполнить аутентификацию. Этот шаг нужно выполнить только один раз для каждого проекта, поскольку токен будет действителен для всех сборок. Токен следует хранить в секрете, как пароль.
Если в вашей среде непрерывной интеграции можно указывать переменные среды, которые будут использоваться в скриптах сборки, просто создайте переменную среды с названием FIREBASE_TOKEN и значением в виде строки токена доступа. Интерфейс командной строки Firebase автоматически выберет переменную среды FIREBASE_TOKEN, и эмуляторы запустятся корректно.
В крайнем случае вы можете просто включить токен в скрипт сборки, но убедитесь, что у ненадежных сторон нет доступа. Для этого заданного в коде подхода добавьте --token "YOUR_TOKEN_STRING_HERE" в команду firebase emulators:exec.
Используйте REST API Emulator Hub.
Как посмотреть список запущенных эмуляторов
Чтобы получить список запущенных эмуляторов, отправьте запрос 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 эмулятора
В таблицах ниже указано, какие эмуляторы поддерживаются клиентскими SDK и Admin SDK. В будущем означает, что поддержка эмулятора планируется, но пока недоступна.
Доступность клиентского SDK
| Android | Платформы Apple | Сайт |
Firebase UI Android |
Firebase UI iOS |
Firebase UI Web |
|
|---|---|---|---|---|---|---|
| Realtime Database | 19.4.0 | 7.2.0 | 8.0.0 | 6.4.0 | Запланировано | Н/Д |
| Cloud Firestore | 21.6.0 | 7.2.0 | 8.0.0 | 6.4.0 | Запланировано | Н/Д |
| 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 | Н/Д |
| Cloud Functions | 19.1.0 | 7.2.0 | 8.0.0 | Н/Д | – | – |
| Hosting | – | – | – | – | – | – |
| Extensions | – | – | – | – | – | Н/Д |
Доступность Admin SDK
| Узел | Java | Python | Go | |
|---|---|---|---|---|
| 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 | Н/Д | – | – | – |
| Hosting | – | – | – | – |
| Extensions | – | – | – | Н/Д |