Pakiet emulatorów lokalnych Firebase można zainstalować i skonfigurować pod kątem różnych prototypów i środowisk testowych – od jednorazowych sesji prototypowania po przepływy pracy ciągłej integracji na dużą skalę.
Instalowanie Pakietu emulatorów lokalnych
Przed zainstalowaniem Pakietu emulatorów będziesz potrzebować:
Aby zainstalować Pakiet emulatorów:
- Zainstaluj interfejs wiersza poleceń Firebase.
Jeśli nie masz jeszcze zainstalowanego interfejsu wiersza poleceń Firebase, zainstaluj go teraz.
Aby korzystać z Pakietu emulatorów, potrzebujesz interfejsu wiersza poleceń w wersji 8.14.0 lub nowszej. Aby sprawdzić, którą wersję masz, użyj tego polecenia:
firebase --version
- Jeśli nie zostało to jeszcze zrobione, zainicjuj bieżący katalog roboczy jako projekt Firebase, wykonując instrukcje wyświetlane na ekranie, aby określić, których usług chcesz używać:
firebase init
- Skonfiguruj Pakiet emulatorów. To polecenie uruchamia kreatora konfiguracji, dzięki któremu możesz wybrać interesujące Cię emulatory, pobrać odpowiednie pliki binarne emulatora i ustawić porty emulatora, jeśli wartości domyślne są nieodpowiednie.
firebase init emulators
Gdy zainstalujesz emulator, nie będzie sprawdzana dostępność aktualizacji, a dodatkowe automatyczne pobieranie nie będzie wykonywane, dopóki nie zaktualizujesz interfejsu wiersza poleceń Firebase.
Skonfiguruj Pakiet emulatorów
Opcjonalnie możesz skonfigurować porty sieciowe emulatorów i ścieżkę do definicji reguł zabezpieczeń w pliku firebase.json
:
- Zmień porty emulatora, uruchamiając polecenie
firebase init emulators
lub edytującfirebase.json
ręcznie. - Zmień ścieżkę do definicji reguł zabezpieczeń, ręcznie edytując obiekt
firebase.json
.
Jeśli nie skonfigurujesz tych ustawień, emulatory będą nasłuchiwać na swoich portach domyślnych, a emulatory Cloud Firestore, Baza danych czasu rzeczywistego i Cloud Storage dla Firebase będą działać z otwartym bezpieczeństwem danych.
Polecenie | Opis |
---|---|
emulatory init | Uruchom kreatora inicjowania emulatora. Określ emulatory do zainstalowania i opcjonalnie określ ustawienia portu emulatora. Metoda init emulators nie jest szkodliwa, a zaakceptowanie wartości domyślnych pozwoli zachować bieżącą konfigurację emulatora. |
Konfiguracja portu
Każdy emulator wiąże się z innym portem w maszynie z preferowaną wartością domyślną.
Emulator | Domyślny port |
---|---|
Uwierzytelnianie | 9099 |
Interfejs użytkownika pakietu emulatorów | 4000 |
Cloud Functions | 5001 |
Eventarc | 9299 |
Baza danych czasu rzeczywistego | 9000 |
Cloud Firestore | 8080 |
Cloud Storage dla Firebase | 9199 |
Hosting Firebase | 5000 |
Pub/Sub | 8085 |
Konfiguracja identyfikatora projektu
W zależności od sposobu wywoływania emulatorów możesz uruchomić wiele instancji emulatora z użyciem różnych identyfikatorów projektu Firebase lub wiele instancji emulatorów dla danego identyfikatora projektu. W takich przypadkach instancje emulatora działają w osobnym środowisku.
Ogólnie dobrze jest ustawić jeden identyfikator projektu dla wszystkich wywołań emulatorów, aby interfejs użytkownika pakietu emulatorów, różne emulatory usług i wszystkie uruchomione instancje określonego emulatora mogły się komunikować prawidłowo we wszystkich przypadkach.
Pakiet emulatorów lokalnych wyświetla ostrzeżenia, gdy wykryje w środowisku wiele identyfikatorów projektów. Możesz jednak zastąpić to zachowanie, ustawiając klucz singleProjectMode
na 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 pobierany przy uruchamianiu z projektu wybranego za pomocą
firebase init
lubfirebase use
. Aby wyświetlić listę projektów (i sprawdzić, który jest wybrany), użyj funkcjifirebase projects:list
. - Testy jednostkowe reguł. Identyfikator projektu jest często podawany w wywołaniach metod biblioteki testowania jednostek reguł
initializeTestEnvironment
lubinitializeTestApp
. - Flaga wiersza poleceń
--project
. Przekazywanie flagi interfejsu wiersza poleceń Firebase--project
zastępuje projekt domyślny. Musisz sprawdzić, czy wartość flagi jest zgodna z identyfikatorem projektu w testach jednostkowych i inicjowaniu aplikacji.
Sprawdź też ustawione na poszczególnych platformach konfiguracje identyfikatorów projektów ustawione podczas konfigurowania projektów platform Apple, Androida i internetu.
Konfiguracja reguł zabezpieczeń
Emulatory pobierzą konfigurację reguł zabezpieczeń z kluczy konfiguracyjnych database
, 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 bazy danych czasu rzeczywistego, emulator Cloud Firestore i część emulatora Cloud Storage dla Firebase opiera się na Javie, którą można dostosować za pomocą flag JVM za pomocą zmiennej środowiskowej JAVA_TOOL_OPTIONS
.
Jeśli na przykład 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ć kilka flag w cudzysłowach rozdzielonych spacjami, np. JAVA_TOOL_OPTIONS="-Xms2g -Xmx4g"
. Flagi te mają wpływ tylko na oparte na Javie komponenty emulatorów i nie mają wpływu na inne części interfejsu wiersza poleceń Firebase, takie jak interfejs pakietu emulatorów.
Uruchamianie emulatorów
Możesz uruchamiać emulatory, dopóki nie zakończą ich ręcznie. Możesz też uruchamiać je przez czas trwania wyznaczonego 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. Wywołanie emulators:start spowoduje pobranie emulatorów do katalogu ~/.cache/firebase/emulators/, jeśli nie są one jeszcze zainstalowane.
|
||||||||||||
emulators:exec scriptpath | Po uruchomieniu emulatorów usług Firebase skonfigurowanych w zadaniu firebase.json uruchom skrypt z adresu scriptpath . Po zakończeniu działania skryptu procesy emulatora zostaną automatycznie zatrzymane.
|
Metoda firebase emulators:exec
jest bardziej odpowiednia w przypadku ciągłych przepływów pracy integracji.
Eksportowanie i importowanie danych emulatora
Możesz eksportować dane z emulatorów usług Uwierzytelnianie, Cloud Firestore, Baza danych czasu rzeczywistego i Cloud Storage dla Firebase, aby wykorzystać je jako wspólny, wspólny zbiór danych bazowych. Te zbiory danych możesz importować za pomocą flagi --import
, jak opisano powyżej.
emulators:export export_directory |
Uwierzytelnianie, Cloud Firestore, Baza danych czasu rzeczywistego lub Emulator Cloud Storage dla Firebase.
Eksportuj dane z działającej instancji emulatora Cloud Firestore, Bazy danych czasu rzeczywistego lub Cloud Storage dla Firebase. Jeśli obiekt
Możesz polecić emulatorom automatyczne eksportowanie danych po wyłączeniu przy użyciu opisanych powyżej flag |
Integracja z systemem CI
Uruchamianie obrazów skonteneryzowanego Pakietu emulatorów
Instalacja i konfiguracja Pakietu emulatorów z kontenerami w typowej konfiguracji CI jest prosta.
Pamiętaj o kilku kwestiach:
Pliki JAR są instalowane i przechowywane w pamięci podręcznej w
~/.cache/firebase/emulators/
.- Aby uniknąć powtarzania pobierania, warto dodać tę ścieżkę do konfiguracji pamięci podręcznej CI.
Jeśli w repozytorium nie ma pliku
firebase.json
, musisz dodać do poleceniaemulators:start
lubemulators:exec
argument wiersza poleceń, aby określić, które emulatory mają zostać uruchomione. Na przykład:--only functions,firestore
.
Generowanie tokena uwierzytelniania (tylko emulator hostowania)
Jeśli Twoje przepływy pracy ciągłej integracji opierają się na Hostingu Firebase, musisz zalogować się za pomocą tokena, aby uruchomić usługę firebase emulators:exec
. Pozostałe emulatory nie wymagają logowania.
Aby wygenerować token, uruchom firebase login:ci
w środowisku lokalnym. Nie należy tego robić w systemie 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. Nie należy go ujawniać.
Jeśli środowisko CI umożliwia określenie zmiennych środowiskowych, których można używać w skryptach kompilacji, wystarczy utworzyć zmienną środowiskową o nazwie FIREBASE_TOKEN
, której wartość będzie ciągiem znaków tokena dostępu. Interfejs wiersza poleceń Firebase automatycznie pobierze zmienną środowiskową FIREBASE_TOKEN
, a emulatory uruchomią się prawidłowo.
W ostateczności możesz po prostu umieścić token w skrypcie kompilacji, ale upewnij się, że niezaufane osoby nie mają do niego dostępu. Aby to zrobić, możesz dodać --token "YOUR_TOKEN_STRING_HERE"
do polecenia 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 punktu końcowego /emulators
w centrum emulatorów.
curl localhost:4400/emulators
W efekcie powstanie obiekt JSON z listą wszystkich uruchomionych emulatorów wraz z 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
W niektórych sytuacjach konieczne jest tymczasowe wyłączenie aktywatorów funkcji lokalnych i rozszerzeń. Możesz na przykład usunąć wszystkie dane w emulatorze Cloud Firestore bez aktywowania funkcji onDelete
, które działają w emulatorach Cloud Functions lub rozszerzeń.
Aby tymczasowo wyłączyć aktywatory funkcji lokalnych, wyślij żądanie PUT
do punktu końcowego /functions/disableBackgroundTriggers
w 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 żądanie PUT
do punktu końcowego /functions/enableBackgroundTriggers
centrum emulatora.
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 pakiety klienta i pakiety Admin SDK. Przyszły oznacza, że obsługa emulatora jest planowana, ale nie jest jeszcze dostępna.
Dostępność pakietu SDK klienta
Urządzenie z Androidem | Platformy Apple | Sieć |
Interfejs Firebase Android |
Interfejs Firebase iOS |
Interfejs Firebase Strona internetowa |
|
---|---|---|---|---|---|---|
Baza danych czasu rzeczywistego | 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 |
Uwierzytelnianie | 20.0.0 | 7.0.0 | 8.0.0 | 7.0.0 | Przyszła | 4.7.2 |
Cloud Storage dla 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 |
Rozszerzenia | Nie dotyczy | Nie dotyczy | Nie dotyczy | Nie dotyczy | Nie dotyczy | Nie dotyczy |
Dostępność pakietu Admin SDK
Węzeł | Java | Python | Go | |
---|---|---|---|---|
Baza danych czasu rzeczywistego | 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 |
Uwierzytelnianie | 9.3.0 | 7.2.0 | 5.0.0 | 4.2.0 |
Cloud Storage dla 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 |
Rozszerzenia | Nie dotyczy | Nie dotyczy | Nie dotyczy | Nie dotyczy |