Установите, настройте и интегрируйте Local Emulator Suite

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

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

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

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

Чтобы установить набор эмуляторов:

  1. Установите интерфейс командной строки Firebase . Если у вас еще не установлен интерфейс командной строки Firebase, установите его сейчас . Для использования 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 будут работать с открытой защитой данных.

Команда Описание
эмуляторы инициализации Запустите мастер инициализации эмулятора. Определите эмуляторы, которые необходимо установить, и при необходимости укажите параметры порта эмулятора. init emulators неразрушающая; принятие значений по умолчанию сохранит текущую конфигурацию эмулятора.

Конфигурация порта

Каждый эмулятор привязывается к другому порту на вашем компьютере с предпочтительным значением по умолчанию.

Эмулятор Порт по умолчанию
Аутентификация 9099
Пользовательский интерфейс набора эмуляторов 4000
Облачные функции 5001
Эвентарк 9299
База данных реального времени 9000
Облако Firestore 8080
Облачное хранилище 9199
Хостинг Firebase 5000
Паб/Саб 8085

Конфигурация правил безопасности

Эмуляторы берут конфигурацию правил безопасности из ключей конфигурации базы 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": {
    "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 основаны на 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/, если они еще не установлены.
Флаг Описание
--only По желанию. Ограничьте запуск эмуляторов. Укажите список имен эмуляторов, разделенных запятыми, указав одно или несколько из «авторизации», «базы данных», «firestore», «функций», «хостинга» или «pubsub».
--inspect-functions debug_port По желанию. Используйте с эмулятором Cloud Functions, чтобы включить отладку функций с точкой останова на указанном порту (или на порте по умолчанию 9229, если аргумент не указан). Обратите внимание, что при указании этого флага эмулятор Cloud Functions переключается в специальный сериализованный режим выполнения, в котором функции выполняются в одном процессе в последовательном (FIFO) порядке; это упрощает отладку функций, хотя поведение отличается от многопроцессорного параллельного выполнения функций в облаке.
--export-on-exit= По желанию. Используйте с эмулятором Authentication, Cloud Firestore, Realtime Database или Cloud Storage. Укажите эмуляторам экспортировать данные в каталог при завершении работы, как описано для команды 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. Импортируйте данные, сохраненные с помощью параметра --export-on-exit или команды emulators:export , в запущенный экземпляр эмулятора Authentication, Cloud Firestore, Realtime Database или Cloud Storage. Любые данные, находящиеся в настоящее время в памяти эмулятора, будут перезаписаны.
эмуляторы: scriptpath Запустите скрипт по адресу scriptpath после запуска эмуляторов продуктов Firebase, настроенных в firebase.json . Процессы эмулятора автоматически останавливаются, когда сценарий завершает работу.
Флаг Описание
--only По желанию. Ограничьте запуск эмуляторов. Укажите список имен эмуляторов, разделенных запятыми, указав одно или несколько из «firestore», «база данных», «функции», «хостинг» или «pubsub».
--inspect-functions debug_port По желанию. Используйте с эмулятором Cloud Functions, чтобы включить отладку функций с точкой останова на указанном порту (или на порте по умолчанию 9229, если аргумент не указан). Обратите внимание, что при указании этого флага эмулятор Cloud Functions переключается в специальный сериализованный режим выполнения, в котором функции выполняются в одном процессе в последовательном (FIFO) порядке; это упрощает отладку функций, хотя поведение отличается от многопроцессорного параллельного выполнения функций в облаке.
--export-on-exit= По желанию. Используйте с эмулятором Authentication, Cloud Firestore, Realtime Database или Cloud Storage. Укажите эмуляторам экспортировать данные в каталог при завершении работы, как описано для команды 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. Импортируйте данные, сохраненные с помощью параметра --export-on-exit или команды emulators:export , в запущенный экземпляр эмулятора Authentication, Cloud Firestore, Realtime Database или Cloud Storage. Любые данные, находящиеся в настоящее время в памяти эмулятора, будут перезаписаны.
--ui По желанию. Запустите пользовательский интерфейс эмулятора во время выполнения.

Метод firebase emulators:exec обычно больше подходит для рабочих процессов непрерывной интеграции.

Экспорт и импорт данных эмулятора

Вы можете экспортировать данные из эмуляторов Authentication, Cloud Firestore, Realtime Database и Cloud Storage для использования в качестве общедоступного общего базового набора данных. Эти наборы данных можно импортировать с помощью флага --import , как описано выше.

эмуляторы: экспорт export_directory

Аутентификация, Cloud Firestore, база данных в реальном времени или эмулятор облачного хранилища . Экспортируйте данные из запущенного экземпляра Cloud Firestore, базы данных реального времени или эмулятора Cloud Storage. Указанный export_directory будет создан, если он еще не существует. Если указанный каталог существует, вам будет предложено подтвердить перезапись предыдущих данных экспорта. Вы можете пропустить это приглашение, используя флаг --force . Каталог экспорта содержит файл манифеста данных, firebase-export-metadata.json .

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

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

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

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

Есть несколько вопросов, на которые следует обратить внимание:

  • Файлы JAR устанавливаются и кэшируются в ~/.cache/firebase/emulators/ .

    • Вы можете добавить этот путь в конфигурацию кэша CI, чтобы избежать повторных загрузок.
  • Если в вашем репозитории нет файла firebase.json , вы должны добавить аргумент командной строки к команде emulators:start или emulators:exec , чтобы указать, какие эмуляторы следует запускать. Например,
    --only functions,firestore .

Создание токена аутентификации (только для эмулятора хостинга)

Если ваши рабочие процессы непрерывной интеграции основаны на хостинге Firebase, вам нужно будет войти в систему с помощью токена, чтобы запустить 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 Будущее Будущее
Облачное хранилище 20.0.0 8.0.0 8.4.0 Н/Д Н/Д Н/Д
Облачные функции 19.1.0 7.2.0 8.0.0 Н/Д Н/Д Н/Д
Хостинг Н/Д Н/Д Н/Д Н/Д Н/Д Н/Д
Расширения Н/Д Н/Д Н/Д Н/Д Н/Д Н/Д

Доступность Admin 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
Облачное хранилище 9.8.0 Будущее Будущее Будущее
Облачные функции Н/Д Н/Д Н/Д Н/Д
Хостинг Н/Д Н/Д Н/Д Н/Д
Расширения Н/Д Н/Д Н/Д Н/Д