Как управлять конфигурациями проекта с помощью манифеста расширений

Манифест расширений – это список экземпляров расширений и их конфигураций. С помощью манифеста вы можете:

  • Как поделиться конфигурацией расширений с другими пользователями
  • Копировать конфигурацию расширений между разными проектами (например, из промежуточного проекта в рабочий).
  • Развертывание всех расширений одновременно
  • Проверьте, как расширения работают с вашим приложением, используя Firebase Local Emulator Suite.
  • Зафиксируйте конфигурацию расширений в системе контроля версий.
  • Включите расширения в конвейер CI/CD

Манифест расширения состоит из двух частей:

  • Раздел extensions в файле firebase.json, который сопоставляет идентификатор экземпляра с версией расширения. Пример:

    {
     "extensions": {
       "my-bigquery-extension": "firebase/firestore-bigquery-export@^0.1.18",
       "my-image-resizer": "firebase/storage-resize-images@^0.1.22",
     }
    }
    
  • Файлы .env, содержащие конфигурацию для каждого из экземпляров расширения, в подкаталоге extensions/ каталога проекта Firebase. Например, экземпляр storage-resize-images может иметь файл .env, подобный следующему:

    IMAGE_TYPE=jpeg
    LOCATION=us-central1
    IMG_BUCKET=${param:PROJECT_ID}.firebasestorage.app
    IMG_SIZES=100x100
    DELETE_ORIGINAL_FILE=false

Как создать манифест расширения

Создать манифест расширения можно тремя способами:

  • Управление манифестом расширений с помощью интерфейса командной строки Firebase
  • Как экспортировать конфигурацию расширений проекта
  • Как изменить файлы манифеста вручную

Ниже описаны первые два способа.

Управление манифестом расширений с помощью интерфейса командной строки Firebase

Большинство команд ext: интерфейса командной строки Firebase можно выполнять с параметром --local, чтобы обновлять манифест расширений, не меняя текущую конфигурацию проекта.

Пример:

firebase ext:install --local firebase/firestore-bigquery-export

После выполнения этой команды вам будет предложено настроить последнюю версию расширения firebase/firestore-bigquery-export и сохранить конфигурацию в манифесте, но она не будет развернута в вашем проекте.

Вот ещё несколько примеров команд, которые изменяют манифест расширений:

# ext:configure changes the params for an extension instance in your extensions manifest
$ firebase ext:configure my-bigquery-extension --local

# ext:update --local updates an instance in your extensions manifest
# to the latest version of that extension
$ firebase ext:update my-bigquery-extension --local

# You can also specify a version if you don't want to update to the latest version
$ firebase ext:update my-bigquery-extension firebase/firestore-bigquery-export@0.1.10 --local 

# ext:uninstall --local removes an instance from your extensions manifest
$ firebase ext:uninstall my-bigquery-extension --local

Как экспортировать конфигурацию расширений проекта

Чтобы сохранить текущую конфигурацию расширений проекта в манифесте, выполните следующие действия:

  1. Если вы ещё этого не сделали, настройте интерфейс командной строки Firebase.
  2. В командной строке перейдите в каталог проекта. (Каталог проекта содержит файл firebase.json).
  3. Выполните команду ext:export:
    firebase ext:export

Команда ext:export добавит раздел extensions в файл firebase.json. Кроме того, команда ext:export создает каталог extensions, содержащий файл .env для каждого установленного экземпляра расширения. В этих файлах содержатся параметры конфигурации для каждого экземпляра.

Протестируйте конфигурацию расширений с помощью Firebase Local Emulator Suite

Добавив экземпляры расширений в манифест, вы можете протестировать их с помощью Local Emulator Suite.

  1. Установите и настройте Local Emulator Suite.

  2. Запустите Local Emulator Suite.

    • Чтобы запустить Emulator Suite в интерактивном режиме, выполните следующую команду: firebase emulators:start
    • Чтобы запустить Emulator Suite и выполнить тестовый скрипт, введите: firebase emulators:exec my-test.sh

Если в манифесте указаны экземпляры расширений, Local Emulator Suite скачает их исходный код в каталог ~/.cache/firebase/extensions. После скачивания запустится Local Emulator Suite, и вы сможете активировать любые фоновые функции расширений и подключить приложение к Emulator Suite, чтобы протестировать интеграцию.

Как развернуть конфигурацию расширений в проекте

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

Чтобы развернуть манифест расширений, выполните следующие действия:

  1. В командной строке перейдите в каталог, в котором сохранены настройки расширений. (Это каталог, в котором находится файл firebase.json. Если вы только что выполнили команду ext:export, то уже находитесь в нужном каталоге.
  2. Выполните команду deploy. Если вы хотите развернуть расширения в проекте, отличном от текущего, также укажите --project=:
    firebase deploy --only extensions –-project=YOUR_PROJECT_ID

Команда deploy проверит конфигурацию каждого экземпляра, спросит, хотите ли вы удалить из целевого проекта экземпляры расширений, не указанные в firebase.json, а затем развернет все экземпляры расширений.

Конфигурации расширений для отдельных проектов

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

  • Добавьте значения параметров, которые различаются в разных проектах, в extensions/EXTENSION_INSTANCE_ID.env.YOUR_PROJECT_ID.
  • Значения общих параметров указываются в extensions/EXTENSION_INSTANCE_ID.env.

Иногда при эмуляции расширений может потребоваться использовать другое значение параметра: например, вы можете указать тестовый ключ API вместо рабочего. Укажите эти параметры в файле .local:

  • Добавьте в файл extensions/EXTENSION_INSTANCE_ID.env.local несекретные параметры, которые вы хотите использовать во время эмуляции.
  • Поместите значения секретных параметров в extensions/EXTENSION_INSTANCE_ID.secret.local.