Zarządzanie konfiguracjami projektów za pomocą pliku manifestu rozszerzeń

Manifest rozszerzeń to lista instancji rozszerzeń i ich konfiguracji. Dzięki manifestowi możesz:

  • udostępniać konfigurację rozszerzeń innym osobom,
  • kopiować konfigurację rozszerzeń między różnymi projektami (np. z projektu roboczego do projektu produkcyjnego),
  • wdrażać wszystkie rozszerzenia naraz,
  • testować działanie rozszerzeń w aplikacji za pomocą Firebase Local Emulator Suite,
  • zatwierdzać konfigurację rozszerzeń w systemie kontroli wersji,
  • uwzględniać rozszerzenia w potoku CI/CD.

Manifest rozszerzeń składa się z 2 części:

  • Sekcja extensions w pliku firebase.json, która jest mapą identyfikatora instancji do odniesienia do wersji rozszerzenia. Przykład:

    {
     "extensions": {
       "my-bigquery-extension": "firebase/firestore-bigquery-export@^0.1.18",
       "my-image-resizer": "firebase/storage-resize-images@^0.1.22",
     }
    }
    
  • Pliki .env zawierające konfigurację każdej instancji rozszerzenia w podkatalogu extensions/ w katalogu projektu w Firebase. Na przykład instancja storage-resize-images może mieć plik .env w takiej postaci:

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

Tworzenie manifestu rozszerzeń

Manifest rozszerzeń można utworzyć na 3 sposoby:

  • Zarządzaj manifestem rozszerzeń za pomocą wiersza poleceń Firebase.
  • Eksportuj konfigurację rozszerzeń projektu.
  • Ręcznie edytuj pliki manifestu.

Pierwsze 2 metody opisujemy poniżej.

Zarządzanie manifestem rozszerzeń za pomocą wiersza poleceń Firebase

Większość poleceń ext: wiersza poleceń Firebase możesz uruchomić z opcją --local, aby zaktualizować manifest rozszerzeń bez zmiany bieżącej konfiguracji projektu.

Przykład:

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

Uruchomienie powyższego polecenia spowoduje wyświetlenie prośby o skonfigurowanie najnowszej wersji rozszerzenia firebase/firestore-bigquery-export i zapisanie konfiguracji w manifeście, ale nie wdroży konfiguracji w Twoim projekcie.

Oto kilka innych przykładów poleceń, które modyfikują manifest rozszerzeń:

# 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

Eksportowanie konfiguracji rozszerzeń projektu

Aby zapisać bieżącą konfigurację rozszerzeń projektu w manifeście, wykonaj te czynności:

  1. Jeśli jeszcze tego nie zrobisz, skonfiguruj wiersz poleceń Firebase
  2. W wierszu poleceń powłoki przejdź do katalogu projektu. (Katalog projektu zawiera plik firebase.json).
  3. Uruchom polecenie ext:export:
    firebase ext:export

Polecenie ext:export doda sekcję extensions do pliku firebase.json. Dodatkowo polecenie ext:export utworzy katalog extensions zawierający plik .env dla każdej zainstalowanej instancji rozszerzenia. Te pliki zawierają parametry konfiguracyjne każdej instancji.

Testowanie konfiguracji rozszerzeń za pomocą Firebase Local Emulator Suite

Gdy dodasz do manifestu rozszerzeń kilka instancji rozszerzeń, możesz je przetestować za pomocą Local Emulator Suite.

  1. Zainstaluj i skonfiguruj Local Emulator Suite.

  2. Uruchom Local Emulator Suite:

    • Aby uruchomić pakiet Emulator Suite interaktywnie, wpisz: firebase emulators:start.
    • Aby uruchomić Pakiet emulatorów i wykonać scenariusz testowania, wpisz: firebase emulators:exec my-test.sh.

Jeśli w manifeście masz instancje rozszerzeń, pakiet Local Emulator Suite Local Emulator Suite pobierze kod źródłowy tych rozszerzeń do katalogu ~/.cache/firebase/extensions. Po pobraniu pakiet Local Emulator Suite uruchomi się i będziesz mieć możliwość wywoływania dowolnych funkcji rozszerzeń uruchamianych w tle oraz łączenia aplikacji z pakietem Emulator Suite, aby przetestować ich integrację z aplikacją.

Wdrażanie konfiguracji rozszerzeń w projekcie

Gdy dodasz do manifestu rozszerzeń kilka instancji rozszerzeń, możesz wdrożyć go w projekcie za pomocą wiersza poleceń Firebase. Podczas wdrażania za pomocą manifestu rozszerzeń instalujesz, aktualizujesz i konfigurujesz wszystkie instancje rozszerzeń w manifeście w jednym projekcie.

Aby wdrożyć manifest rozszerzeń:

  1. W wierszu poleceń powłoki przejdź do katalogu, w którym jest zapisana konfiguracja rozszerzeń. (Jest to katalog zawierający plik firebase.json. Jeśli właśnie uruchomiłeś polecenie ext:export, jesteś już w odpowiednim katalogu).
  2. Uruchom polecenie deploy. Jeśli chcesz wdrożyć rozszerzenia w innym projekcie niż bieżący, podaj też parametr --project=:
    firebase deploy --only extensions –-project=YOUR_PROJECT_ID

Polecenie deploy sprawdzi poprawność konfiguracji każdej instancji, zapyta, czy chcesz usunąć z projektu docelowego instancje rozszerzeń, których nie ma w pliku firebase.json, a następnie wdroży wszystkie instancje rozszerzeń.

Konfiguracje rozszerzeń specyficzne dla projektu

Zapisane konfiguracje rozszerzeń można używać do wdrażania w wielu różnych projektach, np. w projekcie roboczym i projekcie produkcyjnym. W takim przypadku niektóre wartości parametrów mogą się różnić w zależności od projektu. Umożliwiają to pliki .env specyficzne dla projektu:

  • Wartości parametrów, które różnią się w zależności od projektu, umieść w pliku extensions/EXTENSION_INSTANCE_ID.env.YOUR_PROJECT_ID.
  • Wspólne wartości parametrów umieść w pliku extensions/EXTENSION_INSTANCE_ID.env.

Czasami podczas emulowania rozszerzeń możesz chcieć użyć innej wartości parametru, np. klucza API testowego zamiast produkcyjnego. Umieść te parametry w pliku .local:

  • Parametry niebędące tajnymi, których chcesz używać podczas emulacji, umieść w extensions/EXTENSION_INSTANCE_ID.env.local.
  • Tajne wartości parametrów umieść w pliku extensions/EXTENSION_INSTANCE_ID.secret.local.