Пакет Firebase Local Emulator Suite можно установить и настроить для различных сред прототипирования и тестирования: от разовых сеансов прототипирования до рабочих процессов непрерывной интеграции в производственном масштабе.
Установите пакет локального эмулятора
Перед установкой Emulator Suite вам потребуется:
Чтобы установить пакет эмулятора:
- Установите Firebase CLI . Если у вас еще не установлен Firebase CLI, установите его сейчас . Для использования Emulator Suite вам понадобится CLI версии 8.14.0 или выше. Проверить, какая версия у вас установлена, можно с помощью следующей команды:
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 emulators не являются разрушительными; принятие значений по умолчанию сохранит текущую конфигурацию эмулятора. |
Конфигурация порта
Каждый эмулятор привязывается к отдельному порту вашего компьютера с предпочтительным значением по умолчанию.
Эмулятор | Порт по умолчанию |
---|---|
Authentication | 9099 |
App Hosting | 5002 |
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, или несколько экземпляров эмулятора для данного идентификатора проекта. В таких случаях экземпляры эмулятора запускаются в отдельной среде.
Обычно рекомендуется устанавливать один идентификатор проекта для всех вызовов эмулятора, чтобы 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 , такие как Emulator Suite UI .
Запуск эмуляторов
Вы можете запустить эмуляторы до тех пор, пока они не будут прекращены вручную, или работать в течение заданного тестового сценария, а затем автоматически отключаться.
Команда | Описание | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
эмуляторы:старт | Запустите эмуляторы продуктов Firebase, настроенных в firebase.json . Процессы эмулятора будут продолжать работать до тех пор, пока они не будут явно остановлены. Вызов emulators:start загрузит эмуляторы в ~/.cache/firebase/emulators/, если они еще не установлены.
| ||||||||||||
эмуляторы: scriptpath exec | Запустите скрипт по адресу 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 автоматически получит переменную среды FIREBASE_TOKEN
, и эмуляторы запустятся правильно.
В крайнем случае, вы можете просто включить токен в свой сценарий сборки, но убедитесь, что посторонние лица не имеют доступа. Для этого жестко запрограммированного подхода вы можете добавить --token "YOUR_TOKEN_STRING_HERE"
к команде firebase emulators:exec
.
Используйте REST API Emulator Hub.
Список запущенных эмуляторов
Чтобы получить список запущенных в данный момент эмуляторов, отправьте запрос 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
Андроид | платформы 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 | Н/Д | Н/Д | Н/Д | Н/Д |