Пакет Firebase Local Emulator Suite можно установить и настроить для различных сред прототипирования и тестирования: от одноразовых сеансов прототипирования до рабочих процессов непрерывной интеграции в масштабе производства.
Установите пакет локальных эмуляторов
Перед установкой Emulator Suite вам понадобится:
Чтобы установить Emulator Suite:
- Установите Firebase CLI . Если у вас еще не установлен Firebase CLI, установите его сейчас . Для использования Emulator Suite вам понадобится CLI версии 8.14.0 или выше. Проверить, какая версия у вас установлена, можно с помощью следующей команды:
firebase --version
- Если вы еще этого не сделали, инициализируйте текущий рабочий каталог как проект Firebase, следуя подсказкам на экране, чтобы указать, какие продукты следует использовать:
firebase init
- Настройте Emulator Suite. Эта команда запускает мастер настройки, который позволяет выбрать интересующие вас эмуляторы, загрузить соответствующие двоичные файлы эмулятора и задать порты эмулятора, если значения по умолчанию не подходят.
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 |
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
. - Правила модульных тестов. Идентификатор проекта часто указывается в вызовах методов библиотеки Rules Unit Testing
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, вы можете увеличить максимальный размер кучи Java до 4 ГБ:
export JAVA_TOOL_OPTIONS="-Xmx4g"
firebase emulators:start
Можно указать несколько флагов в кавычках, разделенных пробелами, например JAVA_TOOL_OPTIONS="-Xms2g -Xmx4g"
. Флаги влияют только на компоненты эмуляторов на основе Java и не влияют на другие части Firebase CLI, такие как Emulator Suite UI .
Запуск эмуляторов
Вы можете запустить эмуляторы так, чтобы они работали до тех пор, пока их не прекратят вручную, или чтобы они работали в течение указанного тестового сценария, а затем автоматически выключались.
Команда | Описание | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
эмуляторы:старт | Запустите эмуляторы для продуктов Firebase, настроенных в firebase.json . Процессы эмулятора будут продолжать работать до тех пор, пока не будут явно остановлены. Вызов emulators:start загрузит эмуляторы в ~/.cache/firebase/emulators/, если они еще не установлены.
| ||||||||||||
эмуляторы:exec scriptpath | Запустите скрипт в scriptpath после запуска эмуляторов для продуктов Firebase, настроенных в firebase.json . Процессы эмулятора автоматически остановятся, когда скрипт завершит работу.
|
Метод firebase emulators:exec
как правило, больше подходит для рабочих процессов непрерывной интеграции.
Экспорт и импорт данных эмулятора
Вы можете экспортировать данные из Authentication , Cloud Firestore , Realtime Database и Cloud Storage for Firebase для использования в качестве общего базового набора данных. Эти наборы данных можно импортировать с помощью флага --import
, как описано выше.
эмуляторы:экспорт export_directory | Authentication , Cloud Firestore , Realtime Database или Cloud Storage for Firebase . Экспорт данных из работающего экземпляра Cloud Firestore , Realtime Database или Cloud Storage for Firebase . Указанный Вы можете указать эмуляторам автоматически экспортировать данные при завершении работы, используя флаги |
Интеграция с вашей системой CI
Запуск контейнерных образов Emulator Suite
Установка и настройка 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 CLI автоматически подберет переменную среды 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
концентратора эмулятора.
curl -X PUT localhost:4400/functions/disableBackgroundTriggers
Результатом будет JSON-объект, детализирующий текущее состояние.
{
"enabled": false
}
Чтобы включить локальные триггеры функций после их отключения, отправьте запрос PUT
на конечную точку /functions/enableBackgroundTriggers
концентратора эмулятора.
curl -X PUT localhost:4400/functions/enableBackgroundTriggers
Результатом будет JSON-объект, детализирующий текущее состояние.
{
"enabled": true
}
Интеграция SDK эмулятора
Таблицы в этом разделе показывают, какие эмуляторы поддерживаются клиентскими и Admin SDK. Future означает, что поддержка эмулятора запланирована, но пока недоступна.
Доступность клиентского SDK
андроид | Платформы Apple | Веб | Пользовательский интерфейс Firebase андроид | Пользовательский интерфейс Firebase iOS | Пользовательский интерфейс Firebase Веб | |
---|---|---|---|---|---|---|
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 | Н/Д | Н/Д | Н/Д | Н/Д | Н/Д | Н/Д |
Доступность 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 | Н/Д | Н/Д | Н/Д | Н/Д |
Hosting | Н/Д | Н/Д | Н/Д | Н/Д |
Extensions | Н/Д | Н/Д | Н/Д | Н/Д |