Check out what’s new from Firebase@ Google I/O 2021, and join our alpha program for early access to the new Remote Config personalization feature. Learn more

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

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

Установите Local Emulator Suite

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

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

Чтобы установить 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.

Настроить Emulator Suite

Вы можете дополнительно настроить сетевые порты эмуляторов и путь к определениям правил безопасности в файле firebase.json :

  • Измените порты эмулятора, запустив firebase init emulators или отредактировав firebase.json вручную.
  • Измените путь к определениям правил безопасности, отредактировав firebase.json вручную.

Если вы не настроите эти параметры, эмуляторы будут прослушивать свои порты по умолчанию, а эмуляторы Cloud Firestore, Realtime Database и Cloud Storage будут работать с безопасностью открытых данных.

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

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

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

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

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

Эмуляторы будут брать конфигурацию правил безопасности из ключей конфигурации firebase.json 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"
    }
  }
}

Эмуляторы запуска

Вы можете запускать эмуляторы до тех пор, пока они не будут завершены вручную, или работать в течение определенного тестового сценария, а затем автоматически завершиться.

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

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

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

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

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

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

Вы можете --export-on-exit эмуляторам автоматически экспортировать данные при завершении работы, используя --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 и эмуляторы FIREBASE_TOKEN правильно.

В крайнем случае, вы можете просто включить токен в свой сценарий сборки, но убедитесь, что у ненадежных сторон нет доступа. Для этого жестко запрограммированного подхода вы можете добавить --token "YOUR_TOKEN_STRING_HERE" в команду firebase emulators:exec --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.

Чтобы временно отключить локальные триггеры функций, отправьте запрос PUT в /functions/disableBackgroundTriggers точку /functions/disableBackgroundTriggers концентратора эмулятора.

curl -X PUT localhost:4400/functions/disableBackgroundTriggers

Результатом будет объект JSON с подробным описанием текущего состояния.

{
  "enabled": false
}

Чтобы включить локальные триггеры функций после их отключения, отправьте запрос PUT в /functions/enableBackgroundTriggers точку /functions/enableBackgroundTriggers концентратора эмулятора.

curl -X PUT localhost:4400/functions/enableBackgroundTriggers

Результатом будет объект JSON с подробным описанием текущего состояния.

{
  "enabled": true
}

Интеграция SDK эмулятора

В таблицах в этом разделе указано, какие эмуляторы поддерживаются клиентским и административным SDK. Будущее означает, что поддержка эмуляторов запланирована, но пока недоступна.

Доступность клиентского SDK

Android iOS Интернет Пользовательский интерфейс Firebase
Android
Пользовательский интерфейс Firebase
iOS
Пользовательский интерфейс Firebase
Интернет
База данных в реальном времени 19.4.0 7.2.0 8.0.0 6.4.0 Будущее N / A
Cloud Firestore 21.6.0 7.2.0 8.0.0 6.4.0 Будущее N / A
Аутентификация 20.0.0 7.0.0 8.0.0 7.0.0 Будущее Будущее
Облачное хранилище 20.0.0 8.0.0 8.4.0 N / A N / A N / A
Облачные функции 19.1.0 7.2.0 8.0.0 N / A N / A N / A
Хостинг N / A N / A N / A N / A N / A N / A

Доступность Admin SDK

Узел Ява Python Идти
База данных в реальном времени 8.6.0 6.10.0 2.18.0 Будущее
Cloud Firestore 8.0.0 6.10.0 3.0.0 1.0.0
Аутентификация 9.3.0 Будущее Будущее Будущее
Облачное хранилище 9.8.0 Будущее Будущее Будущее
Облачные функции N / A N / A N / A N / A
Хостинг N / A N / A N / A N / A