Установите, настройте и интегрируйте пакет локального эмулятора.

Firebase Local Emulator Suite можно установить и настроить для различных сред прототипирования и тестирования: от одноразовых сеансов прототипирования до рабочих процессов непрерывной интеграции в масштабе производства.

Установить пакет локальных эмуляторов

Перед установкой Emulator Suite вам понадобится:

  • Node.js версии 16.0 или выше.
  • Java JDK версии 11 или выше.

Чтобы установить Emulator Suite:

  1. Установите Firebase CLI . Если у вас ещё не установлен Firebase CLI, установите его сейчас . Для использования Emulator Suite вам потребуется версия CLI 8.14.0 или выше. Вы можете проверить установленную версию с помощью следующей команды:
    firebase --version
  2. Если вы еще этого не сделали, инициализируйте текущий рабочий каталог как проект Firebase, следуя подсказкам на экране, чтобы указать, какие продукты следует использовать:
    firebase init
  3. Настройте 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 .
  • Правила модульных тестов. Идентификатор проекта часто указывается в вызовах методов initializeTestEnvironment или initializeTestApp библиотеки правил модульного тестирования.
  • Флаг командной строки --project . Передача флага --project в Firebase CLI переопределяет проект по умолчанию. Необходимо убедиться, что значение флага соответствует идентификатору проекта в модульных тестах и при инициализации приложения.

Также проверьте конфигурации идентификаторов проектов для конкретной платформы, которые вы установили при настройке платформ 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/, если они ещё не установлены.
Флаг Описание
--only Необязательно. Ограничьте количество запускаемых эмуляторов. Укажите список имён эмуляторов, разделённых запятыми, указав одно или несколько из следующих: «auth», «database», «firestore», «functions», «hosting» или «pubsub».
--inspect-functions debug_port Необязательно. Используйте с эмулятором Cloud Functions , чтобы включить отладку функций по точкам останова на указанном порту (или на порту по умолчанию 9229, если аргумент пропущен). Обратите внимание, что при указании этого флага эмулятор 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.
эмуляторы:exec scriptpath Запустите скрипт в scriptpath после запуска эмуляторов продуктов Firebase, настроенных в firebase.json . Процессы эмулятора автоматически остановятся после завершения выполнения скрипта.
Флаг Описание
--only Необязательно. Ограничьте количество запускаемых эмуляторов. Укажите список имён эмуляторов, разделённых запятыми, указав одно или несколько из следующих: «firestore», «database», «functions», «hosting» или «pubsub».
--inspect-functions debug_port Необязательно. Используйте с эмулятором Cloud Functions , чтобы включить отладку функций по точкам останова на указанном порту (или на порту по умолчанию 9229, если аргумент пропущен). Обратите внимание, что при указании этого флага эмулятор 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_directory

Authentication , Cloud Firestore , Realtime Database или Cloud Storage for Firebase emulator . Экспортируйте данные из работающего экземпляра Cloud Firestore , Realtime Database или Cloud Storage for Firebase emulator . Указанный export_directory будет создан, если он ещё не существует. Если указанный каталог существует, вам будет предложено подтвердить перезапись предыдущих экспортированных данных. Вы можете пропустить этот запрос, используя флаг --force . Каталог export содержит файл манифеста данных firebase-export-metadata.json .

Вы можете указать эмуляторам автоматически экспортировать данные при завершении работы, используя флаги --export-on-exit описанные выше.

Интеграция с вашей системой непрерывной интеграции

Запуск контейнерных образов 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). Следуйте инструкциям по аутентификации. Этот шаг необходимо выполнить только один раз для каждого проекта, поскольку токен будет действителен для всех сборок. Токен следует использовать как пароль; убедитесь, что он хранится в секрете.

Если ваша среда непрерывной интеграции позволяет указывать переменные среды, которые можно использовать в скриптах сборки, просто создайте переменную среды с именем 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. «Будущее» означает, что поддержка эмуляторов запланирована, но пока недоступна.

Доступность клиентского 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 Н/Д Н/Д Н/Д Н/Д Н/Д Н/Д

Доступность Admin 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 Н/Д Н/Д Н/Д Н/Д