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
  • przesyłać konfigurację rozszerzeń do systemu kontroli wersji;
  • uwzględniać rozszerzenia w potoku CI/CD.

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

  • sekcji extensions w pliku firebase.json, która jest mapą identyfikatorów instancji na 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",
     }
    }
    
  • plików .env zawierających konfigurację każdej instancji rozszerzenia w podkatalogu extensions/ w katalogu projektu w Firebase. Na przykład instancja rozszerzenia storage-resize-images może mieć plik .env o takiej zawartości:

    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 plikiem manifestu 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 pliku manifestu, ale nie wdroży konfiguracji w 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 pliku manifestu:

  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 konfiguracji 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 pliku manifestu 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łania dowolnej funkcji rozszerzenia uruchamianej w tle oraz połączenia aplikacji z pakietem Emulator Suite, aby przetestować 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. Gdy wdrożysz manifest rozszerzeń, zainstalujesz, zaktualizujesz i skonfigurujesz wszystkie instancje rozszerzeń w manifeście w projekcie naraz.

Aby wdrożyć manifest rozszerzeń:

  1. W wierszu poleceń przejdź do katalogu, w którym zapisano konfigurację 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 wykorzystać do wdrożenia w wielu różnych projektach, np. w projekcie roboczym i 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.