Pakiet Firebase Local Emulator Suite można zainstalować i skonfigurować dla różnych środowisk prototypowych i testowych, od jednorazowych sesji prototypowania po przepływy pracy ciągłej integracji na skalę produkcyjną.
Zainstaluj pakiet lokalnych emulatorów
Przed zainstalowaniem pakietu emulatorów będziesz potrzebować:
Aby zainstalować pakiet emulatorów:
- Zainstaluj Firebase CLI . Jeśli nie masz jeszcze zainstalowanego interfejsu wiersza polecenia Firebase, zainstaluj go teraz . Do korzystania z pakietu Emulator potrzebny jest CLI w wersji 8.14.0 lub nowszej. Możesz sprawdzić, którą wersję zainstalowałeś za pomocą następującego polecenia:
firebase --version
- Jeśli jeszcze tego nie zrobiłeś, zainicjuj bieżący katalog roboczy jako projekt Firebase, postępując zgodnie z instrukcjami wyświetlanymi na ekranie, aby określić, których produktów użyć:
firebase init
- Skonfiguruj pakiet emulatorów. To polecenie uruchamia kreatora konfiguracji, który pozwala wybrać interesujące emulatory, pobrać odpowiednie pliki binarne emulatora i ustawić porty emulatora, jeśli wartości domyślne nie są odpowiednie.
firebase init emulators
Po zainstalowaniu emulatora nie są wykonywane żadne testy aktualizacji i żadne dodatkowe automatyczne pobieranie nie nastąpi, dopóki nie zaktualizujesz wersji Firebase CLI.
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
firebase init emulators
lub ręcznie edytującfirebase.json
. - Zmień ścieżkę do definicji reguł zabezpieczeń, edytując ręcznie
firebase.json
.
Jeśli nie skonfigurujesz tych ustawień, emulatory będą nasłuchiwać na swoich domyślnych portach, a emulatory Cloud Firestore, Realtime Database i Cloud Storage będą działały z zabezpieczeniami otwartych danych.
Komenda | Opis |
---|---|
emulatory inicjowania | Uruchom kreatora inicjalizacji emulatora. Zidentyfikuj emulatory do zainstalowania i opcjonalnie określ ustawienia portu emulatora. init emulators są nieniszczące; zaakceptowanie ustawień domyślnych zachowa bieżącą konfigurację emulatora. |
Konfiguracja portu
Każdy emulator wiąże się z innym portem na twoim komputerze z preferowaną wartością domyślną.
Emulator | Port domyślny |
---|---|
Uwierzytelnianie | 9099 |
Interfejs użytkownika pakietu emulatorów | 4000 |
Funkcje chmury | 5001 |
Baza danych czasu rzeczywistego | 9000 |
Cloud Firestore | 8080 |
Magazyn w chmurze | 9199 |
Hosting Firebase | 5000 |
Pub/Sub | 8085 |
Konfiguracja reguł bezpieczeństwa
Emulatory przyjmą konfigurację reguł bezpieczeństwa z database
, firestore
i kluczy konfiguracji 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": {
"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 Java
Emulator bazy danych czasu rzeczywistego, emulator Cloud Firestore i część emulatora Cloud Storage są oparte na języku Java, który można dostosować za pomocą flag JVM za pomocą zmiennej środowiskowej JAVA_TOOL_OPTIONS
.
Na przykład, jeśli wystąpią błędy związane z przestrzenią sterty Java, można zwiększyć maksymalny rozmiar sterty Java do 4 GB:
export JAVA_TOOL_OPTIONS="-Xmx4g"
firebase emulators:start
Wiele flag można określić w cudzysłowie oddzielonych spacjami, np. JAVA_TOOL_OPTIONS="-Xms2g -Xmx4g"
. Flagi dotyczą tylko komponentów emulatorów opartych na języku Java i nie mają wpływu na inne części interfejsu wiersza polecenia Firebase, takie jak interfejs użytkownika pakietu emulatorów.
Uruchom emulatory
Możesz uruchomić emulatory, aby działały do momentu ręcznego zakończenia lub działały na czas trwania wyznaczonego skryptu testowego, a następnie automatycznie się zamknęły.
Komenda | Opis | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
emulatory:start | Uruchom emulatory produktów Firebase skonfigurowane w firebase.json . Procesy emulatora będą działać, dopóki nie zostaną jawnie zatrzymane. Wywołanie emulators:start spowoduje pobranie emulatorów do ~/.cache/firebase/emulators/, jeśli nie są jeszcze zainstalowane.
| ||||||||||||
emulatory: scriptpath exec | Uruchom skrypt w ścieżce skryptu po uruchomieniu emulatorów produktów scriptpath skonfigurowanych w firebase.json . Procesy emulatora zostaną automatycznie zatrzymane po zakończeniu działania skryptu.
|
Metoda firebase emulators:exec
jest ogólnie bardziej odpowiednia w przypadku przepływów pracy ciągłej integracji.
Eksportuj i importuj dane emulatora
Możesz eksportować dane z emulatorów uwierzytelniania, Cloud Firestore, Bazy danych czasu rzeczywistego i Cloud Storage, aby używać ich jako wspólnego zestawu danych bazowych, który można udostępniać. Te zestawy danych można importować za pomocą flagi --import
, jak opisano powyżej.
emulatory:eksportuj export_directory | Uwierzytelnianie, Cloud Firestore, baza danych czasu rzeczywistego lub emulator Cloud Storage . Eksportuj dane z działającej instancji Cloud Firestore, Bazy danych czasu rzeczywistego lub emulatora Cloud Storage. Określony Możesz poinstruować emulatory, aby automatycznie eksportowały dane po wyłączeniu, używając opisanych powyżej flag |
Zintegruj ze swoim systemem CI
Uruchamianie skonteneryzowanych obrazów pakietu emulatorów
Instalacja i konfiguracja pakietu emulatorów z kontenerami w typowej konfiguracji CI jest prosta.
Należy zwrócić uwagę na kilka kwestii:
Pliki JAR są instalowane i buforowane w
~/.cache/firebase/emulators/
.- Możesz dodać tę ścieżkę do konfiguracji pamięci podręcznej CI, aby uniknąć wielokrotnego pobierania.
Jeśli nie masz pliku
firebase.json
w swoim repozytorium, musisz dodać argument wiersza polecenia do poleceniaemulators:start
lubemulators:exec
, aby określić, które emulatory mają zostać uruchomione. Na przykład,
--only functions,firestore
.
Generuj token uwierzytelniania (tylko emulator hostingu)
Jeśli przepływy pracy ciągłej integracji opierają się na Hostingu Firebase, musisz zalogować się za pomocą tokena, aby uruchomić firebase emulators:exec
. Pozostałe emulatory nie wymagają logowania.
Aby wygenerować token, uruchom firebase login:ci
w swoim lokalnym środowisku; nie powinno to być wykonywane z systemu CI. Postępuj zgodnie z instrukcjami, aby uwierzytelnić. Ten krok należy wykonać tylko raz na projekt, ponieważ token będzie ważny w różnych kompilacjach. Token należy traktować jak hasło; upewnij się, że jest to utrzymywane w tajemnicy.
Jeśli środowisko CI umożliwia określenie zmiennych środowiskowych, które mogą być używane w skryptach budowania, po prostu utwórz zmienną środowiskową o nazwie FIREBASE_TOKEN
, której wartość jest ciągiem tokenu dostępu. Firebase CLI automatycznie pobierze zmienną środowiskową FIREBASE_TOKEN
, a emulatory uruchomią się poprawnie.
W ostateczności możesz po prostu dołączyć token do skryptu kompilacji, ale upewnij się, że niezaufane strony nie mają dostępu. W tym zakodowanym podejściu możesz dodać --token "YOUR_TOKEN_STRING_HERE"
do polecenia firebase emulators:exec
.
Użyj interfejsu API REST Hub emulatorów
Wyświetl listę uruchomionych emulatorów
Aby wyświetlić listę aktualnie uruchomionych emulatorów, wyślij żądanie GET
do punktu końcowego /emulators
centrum emulatorów.
curl localhost:4400/emulators
Wynikiem będzie obiekt JSON zawierający 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łącz / wyłącz wyzwalacze funkcji w tle
W niektórych sytuacjach konieczne będzie tymczasowe wyłączenie lokalnych wyzwalaczy funkcji i rozszerzeń. Na przykład możesz chcieć usunąć wszystkie dane w emulatorze Cloud Firestore bez uruchamiania jakichkolwiek funkcji onDelete
, które działają w emulatorach Cloud Functions lub Extensions.
Aby tymczasowo wyłączyć lokalne wyzwalacze funkcji, wyślij żądanie PUT
do punktu końcowego /functions/disableBackgroundTriggers
centrum emulatorów.
curl -X PUT localhost:4400/functions/disableBackgroundTriggers
Wynikiem będzie obiekt JSON z wyszczególnieniem aktualnego stanu.
{
"enabled": false
}
Aby włączyć wyzwalacze funkcji lokalnych po ich wyłączeniu, wyślij żądanie PUT
do punktu końcowego /functions/enableBackgroundTriggers
centrum emulatorów.
curl -X PUT localhost:4400/functions/enableBackgroundTriggers
Wynikiem będzie obiekt JSON z wyszczególnieniem aktualnego stanu.
{
"enabled": true
}
Integracje z emulatorem SDK
Tabele w tej sekcji wskazują, które emulatory są obsługiwane przez pakiety SDK klienta i administratora. Przyszłość oznacza, że obsługa emulatora jest planowana, ale nie jest jeszcze dostępna.
Dostępność pakietu SDK klienta
Android | Platformy Apple | Sieć | Interfejs Firebase Android | Interfejs Firebase iOS | Interfejs Firebase Sieć | |
---|---|---|---|---|---|---|
Baza danych czasu rzeczywistego | 19.4.0 | 7.2.0 | 8.0.0 | 6.4.0 | Przyszły | Nie dotyczy |
Cloud Firestore | 21.6.0 | 7.2.0 | 8.0.0 | 6.4.0 | Przyszły | Nie dotyczy |
Uwierzytelnianie | 20.0.0 | 7.0.0 | 8.0.0 | 7.0.0 | Przyszły | Przyszły |
Magazyn w chmurze | 20.0.0 | 8.0.0 | 8.4.0 | Nie dotyczy | Nie dotyczy | Nie dotyczy |
Funkcje chmury | 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ł | Jawa | Pyton | Udać się | |
---|---|---|---|---|
Baza danych czasu rzeczywistego | 8.6.0 | 6.10.0 | 2.18.0 | Przyszły |
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 |
Magazyn w chmurze | 9.8.0 | Przyszły | Przyszły | Przyszły |
Funkcje chmury | 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 |