Instalowanie, konfigurowanie i integrowanie Pakietu emulatorów lokalnych

Pakiet emulatorów lokalnych Firebase można zainstalować i skonfigurować dla różnych środowisk testowych i testowych, od jednorazowych sesji prototypowych po w środowiskach produkcyjnych w trybie ciągłej integracji.

Instalowanie Pakietu emulatorów lokalnych

Przed zainstalowaniem Pakietu emulatorów będziesz potrzebować:

  • Node.js w wersji 16.0 lub nowszej.
  • Java JDK w wersji 11 lub nowszej.

Aby zainstalować Pakiet emulatorów:

  1. Zainstaluj interfejs wiersza poleceń Firebase. Jeśli nie masz jeszcze zainstalowanego interfejsu wiersza poleceń Firebase, zainstaluj ją teraz. Aby korzystać z Pakietu emulatorów, potrzebujesz interfejsu wiersza poleceń w wersji 8.14.0 lub nowszej. Dostępne opcje aby sprawdzić, która wersja jest zainstalowana, używając następującego polecenia:
    firebase --version
  2. Zainicjuj bieżący katalog roboczy. jako projekt Firebase, postępując zgodnie z instrukcjami na ekranie, aby określić, usług do wykorzystania:
    firebase init
  3. Skonfiguruj Pakiet emulatorów. To polecenie uruchamia kreatora konfiguracji, który pozwala wybrać emulatory, pobierz odpowiedni emulator plików binarnych i ustaw porty emulatora, jeśli wartości domyślne są nieodpowiednie.
    firebase init emulators

Po zainstalowaniu emulatora nie są sprawdzane żadne aktualizacje ani automatyczne pobieranie będzie możliwe, dopóki nie zaktualizujesz interfejsu wiersza poleceń Firebase.

Skonfiguruj Pakiet emulatorów

Opcjonalnie możesz skonfigurować emulatory porty sieciowe i ścieżka do zabezpieczeń Definicje reguł w pliku firebase.json:

  • Aby zmienić porty emulatora, uruchom polecenie firebase init emulators lub wprowadź zmiany firebase.json ręcznie.
  • Zmień ścieżkę do definicji reguł zabezpieczeń, edytując plik firebase.json ręcznie.

Jeśli nie skonfigurujesz tych ustawień, emulatory będą nasłuchiwać porty domyślne, a Cloud Firestore, Realtime Database i Cloud Storage for Firebase emulatory będą działać z otwartym zabezpieczeniami danych.

Polecenie Opis
emulatory init Uruchom kreatora inicjowania emulatora. Określ emulatory do zainstalowania i opcjonalnie określ ustawienia portu emulatora. Element init emulators nie jest szkodliwy. zaakceptowanie wartości domyślnych pozwoli zachować bieżącą konfigurację emulatora.

Konfiguracja portu

Każdy emulator wiąże się z innym portem na komputerze z preferowaną wartością domyślną .

Emulator Domyślny port
Authentication 9099
Emulator Suite UI 4000
Cloud Functions 5001
Eventarc 9299
Realtime Database 9000
Cloud Firestore 8080
Cloud Storage for Firebase 9199
Firebase Hosting 5000
Pub/Sub 8085

Konfiguracja identyfikatora projektu

W zależności od sposobu wywoływania emulatorów możesz uruchomić wiele instancji emulatora korzystającego z różnych identyfikatorów projektów Firebase lub wielu instancji emulatora. dla danego identyfikatora projektu. W takich przypadkach instancje emulatora działają w w osobnym środowisku.

Ogólnie dobrze jest ustawić jeden identyfikator projektu dla wszystkich emulatorów. Emulator Suite UI, różne emulatory usług i inne funkcje uruchomione instancje danego emulatora mogą komunikować się prawidłowo we wszystkich przypadków.

Local Emulator Suite wyświetla ostrzeżenia, gdy wykryje wiele identyfikatorów projektów w w środowisku, ale możesz to zmienić, ustawiając parametr singleProjectMode klucz do false w: firebase.json.

Deklaracje dotyczące identyfikatorów projektów znajdziesz tutaj:

  • Domyślny projekt w wierszu poleceń. Domyślnie identyfikator projektu będzie zostanie pobrana podczas uruchamiania z projektu wybranego przy użyciu firebase init lub firebase use Aby wyświetlić listę projektów (i sprawdzić, który z nich został wybrany) użyj funkcji firebase projects:list.
  • Testy jednostkowe reguł. Identyfikator projektu jest często określony w wywołaniach reguł. Metody biblioteki testów jednostkowych initializeTestEnvironment lub initializeTestApp.
  • Flaga wiersza poleceń --project. Przekazano interfejs wiersza poleceń Firebase Flaga --project zastępuje projekt domyślny. Musisz upewnić się, że wartość flagi odpowiada identyfikatorowi projektu w testach jednostkowych i inicjowaniu aplikacji.

Sprawdź też ustawione konfiguracje identyfikatorów projektu na poziomie platformy skonfigurować platformy Apple, Projekty na Androida i internet.

Konfiguracja reguł zabezpieczeń

Emulatory przejmą konfigurację reguł zabezpieczeń z: database, Klucze konfiguracyjne firestore i storage w 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": {
    "singleProjectMode": false, // do not warn on detection of multiple project IDs
    "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"
    }
  }
}

Określanie opcji Javy

Emulator Realtime Database i Cloud Firestore oraz część Emulator Cloud Storage for Firebase jest oparty na Javie, którą można dostosować z flagami JVM za pomocą zmiennej środowiskowej JAVA_TOOL_OPTIONS.

Na przykład jeśli wystąpią błędy związane z przestrzenią sterty Java, możesz zwiększyć maksymalny rozmiar stosu Java do 4 GB:

export JAVA_TOOL_OPTIONS="-Xmx4g"
firebase emulators:start

Możesz podać wiele flag w cudzysłowach rozdzielonych spacjami, na przykład JAVA_TOOL_OPTIONS="-Xms2g -Xmx4g" Flagi te wpływają tylko na zasoby oparte na Javie emulatorów i nie mają żadnego wpływu na inne części Interfejs wiersza poleceń Firebase, taki jak Emulator Suite UI.

Uruchamianie emulatorów

Możesz uruchamiać emulatory, dopóki nie zakończą ich ręcznie. Możesz też uruchamiać je przez cały czas przez czas wybranego skryptu testowego, a następnie automatycznie się wyłączy.

Polecenie Opis
emulators:start Uruchom emulatory usług Firebase skonfigurowanych w firebase.json. Procesy emulatora będą działać, dopóki nie zostaną wyraźnie zatrzymane. Łączę emulators:start pobierze emulatory do ~/.cache/firebase/emulators/, jeśli nie są jeszcze zainstalowane.
Flaga Opis
--only Opcjonalne. Ogranicz które emulatory. Podaj oddzieloną przecinkami listę nazw emulatorów, określając jedną lub „auth”, „database”, „firestore”, „functions”, „hosting” lub „pubsub”.
--inspect-functions debug_port Opcjonalne. Używaj razem z Emulator Cloud Functions umożliwiający debugowanie punktów przerwania funkcji w określonym miejscu port (lub domyślny port 9229, jeśli argument został pominięty). Pamiętaj, że gdy ta flaga jest emulator Cloud Functions przełącza się specjalistycznym trybem wykonywania, w którym funkcje są wykonywane w ramach jednego procesu, kolejność sekwencyjna (FIFO); upraszcza to debugowanie funkcji, chociaż różni się od wieloprocesowego, równoległego wykonywania funkcji w chmurze.
--export-on-exit= Opcjonalne. Użyj w połączeniu z usługami Authentication, Cloud Firestore, Realtime Database lub Emulator Cloud Storage for Firebase. Poproś emulatory, aby wyeksportowały dane do w momencie wyłączenia, zgodnie z opisem dla emulators:export . Katalog eksportu można określić za pomocą tej flagi: firebase emulators:start --export-on-exit=./saved-data Jeśli używasz --import, domyślna ścieżka eksportu jest taka sama; np.: firebase emulators:start --import=./data-path --export-on-exit Na koniec w razie potrzeby przekaż różne ścieżki do katalogów do --import i --export-on-exit.
--import=import_directory Opcjonalne. Użyj w połączeniu z usługami Authentication, Cloud Firestore, Realtime Database lub Emulator Cloud Storage for Firebase. Importuj dane zapisane za pomocą Opcja uruchamiania --export-on-exit lub emulators:export do uruchomionego Authentication, Cloud Firestore, Realtime Database lub Instancja emulatora Cloud Storage for Firebase. Wszystkie dane znajdujące się obecnie w pamięci emulatora to nadrzędne.
emulators:exec scriptpath Po uruchomieniu emulatorów usług Firebase uruchom skrypt na stronie scriptpath skonfigurowano w: firebase.json. Procesy emulatora zatrzymają się automatycznie, gdy zakończył działanie skryptu.
Flaga Opis
--only Opcjonalne. Ogranicz które emulatory. Podaj oddzieloną przecinkami listę nazw emulatorów, określając jedną lub „firestore”, „database”, „functions”, „hosting” lub „pubsub”.
--inspect-functions debug_port Opcjonalne. Używaj razem z Emulator Cloud Functions, aby włączyć debugowanie punktów przerwania funkcji w w określonym porcie (lub domyślny port 9229, jeśli argument został pominięty). Pamiętaj, że gdy zostanie podana, emulator Cloud Functions przełączy się na specjalną zserializowany w trybie wykonywania, w którym funkcje są wykonywane w ramach pojedynczego procesu kolejność sekwencyjna (FIFO); upraszcza to debugowanie funkcji, chociaż różni się od wieloprocesowego, równoległego wykonywania funkcji w chmurze.
--export-on-exit= Opcjonalne. Użyj w połączeniu z usługami Authentication, Cloud Firestore, Realtime Database lub Emulator Cloud Storage for Firebase. Poproś emulatory, aby wyeksportowały dane do w momencie wyłączenia, zgodnie z opisem dla emulators:export . Katalog eksportu można określić za pomocą tej flagi: firebase emulators:start --export-on-exit=./saved-data Jeśli używasz --import, domyślna ścieżka eksportu jest taka sama; np.: firebase emulators:start --import=./data-path --export-on-exit Na koniec w razie potrzeby przekaż różne ścieżki do katalogów do --import i --export-on-exit.
--import=import_directory Opcjonalne. Użyj w połączeniu z usługami Authentication, Cloud Firestore, Realtime Database lub Emulator Cloud Storage for Firebase. Importuj dane zapisane za pomocą Opcja uruchamiania --export-on-exit lub emulators:export do uruchomionego Authentication, Cloud Firestore, Realtime Database lub Instancja emulatora Cloud Storage for Firebase. Wszystkie dane znajdujące się obecnie w pamięci emulatora zostanie zastąpiona.
--ui Opcjonalne. uruchamiać interfejs emulatora podczas wykonywania zadania;

Metoda firebase emulators:exec jest ogólnie bardziej odpowiednia w przypadku w trybie ciągłej integracji.

Eksportowanie i importowanie danych emulatora

Możesz eksportować dane z usług Authentication, Cloud Firestore, Realtime Database oraz Emulatory funkcji Cloud Storage for Firebase, których można używać jako wspólnych danych bazowych ustawiony. Te zbiory danych można importować za pomocą flagi --import, opisane powyżej.

emulators:export export_directory

Emulator Authentication, Cloud Firestore, Realtime Database lub Cloud Storage for Firebase. Eksportuj dane z aktywnego Cloud Firestore, Realtime Database lub Cloud Storage for Firebase z instancji emulatora. W takim przypadku zostanie utworzony określony element export_directory które jeszcze nie istnieją. Jeśli podany katalog istnieje, zobaczysz prośbę o potwierdzenie, poprzedni eksport danych należy zastąpić. Możesz pominąć ten prompt, używając --force. Katalog eksportu zawiera plik manifestu danych. firebase-export-metadata.json

Możesz polecić emulatorom automatyczne eksportowanie danych po wyłączeniu za pomocą Flagi --export-on-exit opisane powyżej.

Integracja z systemem CI

Uruchamianie obrazów skonteneryzowanego Pakietu emulatorów

Instalacja i konfiguracja Pakietu emulatorów z kontenerami w typowa konfiguracja CI jest prosta.

Pamiętaj o kilku kwestiach:

  • Pliki JAR są instalowane i przechowywane w pamięci podręcznej w ~/.cache/firebase/emulators/.

    • Możesz dodać tę ścieżkę do konfiguracji pamięci podręcznej CI, aby uniknąć wielokrotnie pobierać pliki.
  • Jeśli w repozytorium nie ma pliku firebase.json, musisz dodać argument wiersza poleceń do polecenia emulators:start lub emulators:exec aby określić, które emulatory mają zostać uruchomione. Przykład:
    --only functions,firestore.

Generowanie tokena uwierzytelniania (tylko emulator hostowania)

Jeśli Twoje przepływy pracy ciągłej integracji opierają się na Firebase Hosting, będzie musiał zalogować się za pomocą tokena, aby uruchomić firebase emulators:exec. inne emulatory nie wymagają logowania.

Aby wygenerować token, uruchom firebase login:ci w środowisku lokalnym. nie należy tego robić w ramach systemu CI. Wykonaj instrukcje uwierzytelniania. Ten krok musisz wykonać tylko raz w każdym projekcie, ponieważ token będzie ważny we wszystkich kompilacjach. Token powinien być traktowany jak hasło. zabezpieczysz go w tajemnicy.

Jeśli środowisko CI umożliwia określenie zmiennych środowiskowych, których można użyć używanych w skryptach kompilacji, wystarczy utworzyć zmienną środowiskową o nazwie FIREBASE_TOKEN, gdzie wartością jest ciąg tokena dostępu. Interfejs wiersza poleceń Firebase automatycznie pobierze zmienną środowiskową FIREBASE_TOKEN oraz uruchamiają się prawidłowo.

W ostateczności możesz po prostu umieścić token w skrypcie kompilacji, aby zapewnić, że niezaufane osoby nie będą miały do niego dostępu. W przypadku tego kodu możesz dodać --token "YOUR_TOKEN_STRING_HERE" do firebase emulators:exec.

Używanie interfejsu API REST centrum emulatorów

Wyświetlenie listy uruchomionych emulatorów

Aby wyświetlić listę obecnie uruchomionych emulatorów, wyślij żądanie GET do /emulators punktu końcowego centrum emulatorów.

curl localhost:4400/emulators

W efekcie powstanie obiekt JSON z listą wszystkich uruchomionych emulatorów i ich konfigurację hosta/portu, na przykład:

{
  "hub":{
    "name": "hub",
    "host": "localhost",
    "port": 4400
  },
  "functions": {
    "name": "functions",
    "host": "localhost",
    "port": 5001
  }
  "firestore": {
    "name": "firestore",
    "host": "localhost",
    "port": 8080
  }
}

Włączanie i wyłączanie aktywatorów funkcji działających w tle

Czasem konieczne jest tymczasowe wyłączenie funkcji lokalnej reguły rozszerzenia. Możesz na przykład usunąć wszystkie dane emulatorowi Cloud Firestore bez aktywowania funkcji onDelete, które są uruchomione w emulatorach Cloud Functions lub Extensions.

Aby tymczasowo wyłączyć aktywatory funkcji lokalnych, wyślij żądanie PUT do Punkt końcowy /functions/disableBackgroundTriggers centrum emulatorów.

curl -X PUT localhost:4400/functions/disableBackgroundTriggers

W rezultacie powstanie obiekt JSON zawierający szczegółowe informacje na temat bieżącego stanu.

{
  "enabled": false
}

Aby włączyć aktywatory funkcji lokalnych po ich wyłączeniu, wyślij PUT żądanie do punktu końcowego /functions/enableBackgroundTriggers emulatora Treści regularne.

curl -X PUT localhost:4400/functions/enableBackgroundTriggers

W rezultacie powstanie obiekt JSON zawierający szczegółowe informacje na temat bieżącego stanu.

{
  "enabled": true
}

Integracje pakietu SDK emulatorów

Tabele w tej sekcji wskazują, które emulatory są obsługiwane przez klienta i pakiety Admin SDK. Przyszły oznacza, że obsługa emulatora jest planowana, ale nie jest to jeszcze możliwe. i dostępności informacji.

Dostępność pakietu SDK klienta

Android Platformy Apple Sieć Interfejs Firebase
Android
Interfejs Firebase
iOS
Interfejs Firebase
Strona internetowa
Realtime Database 19.4.0 7.2.0 8.0.0 6.4.0 Przyszła Nie dotyczy
Cloud Firestore 21.6.0 7.2.0 8.0.0 6.4.0 Przyszła Nie dotyczy
Authentication 20.0.0 7.0.0 8.0.0 7.0.0 Przyszła 4.7.2
Cloud Storage for Firebase 20.0.0 8.0.0 8.4.0 7.0.0 11.0.0 Nie dotyczy
Cloud Functions 19.1.0 7.2.0 8.0.0 Nie dotyczy Nie dotyczy Nie dotyczy
Hosting Nie dotyczy Nie dotyczy Nie dotyczy Nie dotyczy Nie dotyczy Nie dotyczy
Extensions Nie dotyczy Nie dotyczy Nie dotyczy Nie dotyczy Nie dotyczy Nie dotyczy

Dostępność pakietu Admin SDK

Węzeł Java Python Go
Realtime Database 8.6.0 6.10.0 2.18.0 Przyszła
Cloud Firestore 8.0.0 6.10.0 3.0.0 1.0.0
Authentication 9.3.0 7.2.0 5.0.0 4.2.0
Cloud Storage for Firebase 9.8.0 Przyszła Przyszła Przyszła
Cloud Functions Nie dotyczy Nie dotyczy Nie dotyczy Nie dotyczy
Hosting Nie dotyczy Nie dotyczy Nie dotyczy Nie dotyczy
Extensions Nie dotyczy Nie dotyczy Nie dotyczy Nie dotyczy