Firebase Local Emulator Suite можно установить и настроить для различных прототипов и тестовых сред, от разовых сеансов прототипирования до рабочих процессов непрерывной интеграции в масштабе производства.
Установите пакет локального эмулятора
Перед установкой Emulator Suite вам потребуется:
Чтобы установить набор эмуляторов:
- Установите интерфейс командной строки Firebase . Если у вас еще не установлен интерфейс командной строки Firebase, установите его сейчас . Для использования 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 неразрушающая; принятие значений по умолчанию сохранит текущую конфигурацию эмулятора. |
Конфигурация порта
Каждый эмулятор привязывается к другому порту на вашем компьютере с предпочтительным значением по умолчанию.
Эмулятор | Порт по умолчанию |
---|---|
Аутентификация | 9099 |
Пользовательский интерфейс набора эмуляторов | 4000 |
Облачные функции | 5001 |
Эвентарк | 9299 |
База данных реального времени | 9000 |
Облако Firestore | 8080 |
Облачное хранилище для Firebase | 9199 |
Хостинг Firebase | 5000 |
Паб/Саб | 8085 |
Конфигурация идентификатора проекта
В зависимости от того, как вы вызываете эмуляторы, вы можете запускать несколько экземпляров эмулятора, используя разные идентификаторы проекта Firebase, или несколько экземпляров эмулятора для данного идентификатора проекта. В таких случаях экземпляры эмулятора запускаются в отдельной среде.
Как правило, рекомендуется устанавливать один идентификатор проекта для всех вызовов эмулятора, чтобы пользовательский интерфейс Emulator Suite, различные эмуляторы продуктов и все запущенные экземпляры определенного эмулятора могли правильно взаимодействовать во всех случаях.
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
Эмулятор базы данных реального времени, эмулятор Cloud Firestore и часть эмулятора Cloud Storage для 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.
Эмуляторы запуска
Вы можете запускать эмуляторы до тех пор, пока они не будут остановлены вручную, или запускать их в течение назначенного тестового сценария, а затем автоматически завершать работу.
Команда | Описание | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
эмуляторы: старт | Запустите эмуляторы для продуктов 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 | Аутентификация, Cloud Firestore, база данных в реальном времени или облачное хранилище для эмулятора Firebase . Экспорт данных из работающего Cloud Firestore, базы данных реального времени или облачного хранилища для экземпляра эмулятора 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 концентратора эмулятора
Список запущенных эмуляторов
Чтобы получить список запущенных в данный момент эмуляторов, отправьте запрос 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 эмулятора
В таблицах в этом разделе указано, какие эмуляторы поддерживаются клиентом и Admin SDK. Будущее означает, что поддержка эмулятора запланирована, но пока недоступна.
Доступность клиентского SDK
Андроид | Платформы Apple | Интернет | Пользовательский интерфейс Firebase Андроид | Пользовательский интерфейс Firebase iOS | Пользовательский интерфейс Firebase Интернет | |
---|---|---|---|---|---|---|
База данных реального времени | 19.4.0 | 7.2.0 | 8.0.0 | 6.4.0 | Будущее | Н/Д |
Облако Firestore | 21.6.0 | 7.2.0 | 8.0.0 | 6.4.0 | Будущее | Н/Д |
Аутентификация | 20.0.0 | 7.0.0 | 8.0.0 | 7.0.0 | Будущее | 4.7.2 |
Облачное хранилище для Firebase | 20.0.0 | 8.0.0 | 8.4.0 | 7.0.0 | 11.0.0 | Н/Д |
Облачные функции | 19.1.0 | 7.2.0 | 8.0.0 | Н/Д | Н/Д | Н/Д |
Хостинг | Н/Д | Н/Д | Н/Д | Н/Д | Н/Д | Н/Д |
Расширения | Н/Д | Н/Д | Н/Д | Н/Д | Н/Д | Н/Д |
Доступность SDK администратора
Узел | Джава | питон | Идти | |
---|---|---|---|---|
База данных реального времени | 8.6.0 | 6.10.0 | 2.18.0 | Будущее |
Облако Firestore | 8.0.0 | 6.10.0 | 3.0.0 | 1.0.0 |
Аутентификация | 9.3.0 | 7.2.0 | 5.0.0 | 4.2.0 |
Облачное хранилище для Firebase | 9.8.0 | Будущее | Будущее | Будущее |
Облачные функции | Н/Д | Н/Д | Н/Д | Н/Д |
Хостинг | Н/Д | Н/Д | Н/Д | Н/Д |
Расширения | Н/Д | Н/Д | Н/Д | Н/Д |