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

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

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

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

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

Для установки пакета эмуляторов:

  1. Установите Firebase CLI . Если у вас еще не установлен Firebase CLI, установите его сейчас . Для использования Emulator Suite вам потребуется версия CLI 8.14.0 или выше. Вы можете проверить, какая версия у вас установлена, с помощью следующей команды:
    firebase --version
  2. Если вы еще этого не сделали, инициализируйте текущий рабочий каталог как проект Firebase, следуя подсказкам на экране, чтобы указать, какие продукты использовать:
    firebase init
  3. Настройте пакет эмуляторов. Эта команда запускает мастер настройки, который позволяет выбрать интересующие вас эмуляторы, загрузить соответствующие бинарные файлы эмуляторов и задать порты эмуляторов, если значения по умолчанию не подходят.
    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: 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.
эмуляторы: путь к исполняемому 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 . Экспорт данных из работающего экземпляра эмулятора Cloud Firestore , Realtime Database или Cloud Storage for Firebase . Указанный export_directory будет создан, если он еще не существует. Если указанный каталог существует, вам будет предложено подтвердить перезапись предыдущих экспортированных данных. Вы можете пропустить это запрос, используя флаг --force . Каталог экспорта содержит файл манифеста данных firebase-export-metadata.json .

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

Интегрируйте с вашей системой CI.

Запуск контейнеризированных образов Emulator Suite

Установка и настройка Emulator Suite с контейнерами в типичной системе непрерывной интеграции не представляет сложности.

Следует отметить несколько моментов:

  • 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 в 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

Android платформы Apple Веб Пользовательский интерфейс Firebase
Android
Пользовательский интерфейс 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 администратора

Узел Java Python Идти
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 Н/Д Н/Д Н/Д Н/Д