Testowanie aplikacji internetowych lokalnie za pomocą emulatora Firebase App Hosting

Przed wdrożeniem aplikacji App Hosting możesz przeprowadzić testy lokalne za pomocą emulatora App Hosting, który jest częścią pakietu emulatorów lokalnych Firebase.

Zanim użyjesz emulatora App Hosting, zapoznaj się z ogólnym przepływem pracy w Local Emulator Suite, zainstaluj i skonfiguruj Local Emulator Suite oraz zapoznaj się z poleceniami wiersza poleceń.

W tym temacie zakładamy, że znasz już App Hosting. W razie potrzeby zapoznaj się z wprowadzeniem do App Hosting i innymi materiałami, aby zrozumieć, jak działa App Hosting.

Co mogę zrobić za pomocą emulatora App Hosting?

Emulator App Hosting umożliwia testowanie i doskonalenie aplikacji internetowych na komputerze lokalnym. Może to usprawnić proces tworzenia aplikacji i poprawić jakość aplikacji internetowych tworzonych za pomocą Firebase i wdrażanych w usłudze App Hosting.

Emulator App Hosting:

  1. Umożliwia uruchamianie aplikacji internetowej lokalnie przy użyciu zmiennych środowiskowych zdefiniowanych w plikach konfiguracyjnych apphosting.yaml.
  2. Może eksportować sekrety zapisane w różnych środowiskach App Hosting, co umożliwia symulowanie aplikacji w różnych środowiskach.
  3. Można go używać razem z innymi emulatorami Firebase. Jeśli używasz Firehose, Auth lub innego emulatora, Local Emulator Suite powoduje, że te emulatory są uruchamiane przed emulatorem App Hosting.

Konfigurowanie emulatora

Na początek zainstaluj i inicjuj Local Emulator Suite zgodnie z instrukcjami podanymi w artykule Instalowanie, konfigurowanie i integrowanie lokalnego pakietu emulatorów. Oprócz innych emulatorów Firebase, które chcesz skonfigurować, wybierz App Hosting Emulator. CLI wyświetli prompt z zapytaniem o wartości emulatora App Hosting, w tym:

  • Katalog główny aplikacji w relacji do projektu. Jest to ważne, jeśli używasz monorepo z App Hosting.
  • Czy chcesz wyeksportować sekrety dla określonych środowisk.
firebase init emulators
=== Emulators Setup
? Which Firebase emulators do you want to set up? Press Space to select emulators, then Enter to confirm your choices. (Press
<space> to select, <a> to toggle all, <i> to invert selection, and <enter> to proceed)
❯◯ App Hosting Emulator
 ◯ Firestore Emulator
 ◯ Database Emulator
 ◯ Hosting Emulator
 ◯ Pub/Sub Emulator
 ◯ Storage Emulator
 ◯ Eventarc Emulator
(Move up and down to reveal more choices)

? Specify your app's root directory relative to your project (.)

? What configs would you like to export? (Press
<space> to select, <a> to toggle all, <i> to invert selection, and <enter> to proceed)
 ❯◯ Secrets

? Which environment would you like to export secrets from Secret Manager for?:
  ◯ base (apphosting.yaml)
 ❯◯ staging (apphosting.yaml + apphosting.staging.yaml)
  ◯ preview (apphosting.yaml + apphosting.preview.yaml)

i Wrote Secrets as environment variables to apphosting.local.yaml.
i apphosting.local.yaml has been automatically added to your .gitignore.

Wartości podane w tym procesie konfiguracji są używane do aktualizowania konfiguracji emulatora App Hostingfirebase.json. Możesz też skonfigurować emulator hostingu aplikacji, aktualizując bezpośrednio firebase.json. Schemat emulatora hostowania aplikacji:

{
  ...
  "emulators": {
    "apphosting": {
      "startCommandOverride": <command> [optional]
      "rootDirectory": <path> [optional]
      }
    }
  }
  • startCommandOverride jest generowany automatycznie i ustawiany podczas inicjowania emulatora. Jeśli nie podasz go, emulator wykryje i uruchomi polecenie dewelopera menedżera pakietów.
  • rootDirectory służy do obsługi konfiguracji monorepo. Jeśli Twoja aplikacja internetowa znajduje się w podkatalogu, musisz podać ścieżkę do tego katalogu w stosunku do katalogu głównego (lokalizacja firebase.json).

Zarządzanie emulacją

Inicjowanie emulatora powoduje utworzenie pliku apphosting.local.yaml w katalogu głównym aplikacji. Ten plik konfiguracji ma ten sam schemat co plik apphosting.yaml używany w produkcji, ale jest przeznaczony wyłącznie do lokalnego tworzenia aplikacji. Domyślnie emulator odczytuje konfigurację z pliku apphosting.yaml, ale jeśli plik apphosting.local.yaml jest obecny, to konfiguracje w tym pliku mają wyższy priorytet.

Eksportowanie obiektów tajnych w celu symulowania różnych środowisk lokalnie

Jeśli pracujesz w wielu środowiskach i chcesz lokalnie symulować różne środowiska aplikacji, możesz potrzebować odpowiednich sekretów. Tajne dane dla konkretnego środowiska możesz wyeksportować za pomocą polecenia wiersza poleceńapphosting:config:export (ewentualnie, jak pokazano w konfiguracji emulatora, możesz opcjonalnie zaimportować tajne dane podczas inicjalizacji emulatora).

To polecenie wymaga wybrania jednego z dostępnych środowisk App Hosting projektu. Konfiguracja App Hosting dla środowiska (np. „apphosting.staging.yaml”) i podstawowa konfiguracja App Hosting („apphosting.yaml”) są scalane, przy czym pierwszeństwo ma konfiguracja dla środowiska. Jeśli w obu konfiguracjach występują obiekty tajne o tym samym nazwie, używany jest obiekt tajny z konfiguracji dla danego środowiska.

Aby na przykład wyeksportować sekrety do emulatora ze środowiska pośredniego:

firebase apphosting:config:export --project <your firebase project Id>

? What configs would you like to export? (Press
<space> to select, <a> to toggle all, <i> to invert selection, and <enter> to proceed)
 ❯◯ Secrets

? Which environment would you like to export secrets from Secret Manager for?:
  ◯ base (apphosting.yaml)
 ❯◯ staging (apphosting.yaml + apphosting.staging.yaml)
  ◯ preview (apphosting.yaml + apphosting.preview.yaml)
i Wrote Secrets as environment variables to apphosting.local.yaml.
i apphosting.local.yaml has been automatically added to your .gitignore.

Plik apphosting.local.yaml zostanie zaktualizowany (lub utworzony, jeśli go nie ma) z wyeksportowanymi obiektami tajnymi jako zmiennymi środowiskowymi. Ponieważ plik zawiera teraz informacje poufne w postaci zwykłego tekstu, zostanie automatycznie dodany do pliku .gitignore, aby zapobiec przypadkowemu zacommitowaniu go do repozytorium kodu źródłowego.

Uruchamianie emulatora

firebase emulators:start

Spowoduje to uruchomienie wszystkich emulatorów zdefiniowanych w pliku firebase.json, w tym emulatora App Hosting.