了解 2023 年 Google I/O 大会上介绍的 Firebase 亮点。了解详情

Uruchamiaj funkcje lokalnie

Firebase CLI zawiera emulator Cloud Functions, który może emulować następujące typy funkcji:

  • Funkcje HTTPS
  • Wywoływalne funkcje
  • Funkcje działające w tle uruchamiane z Firebase Authentication, Realtime Database, Cloud Firestore, Cloud Storage i Cloud Pub/Sub.

Możesz uruchamiać funkcje lokalnie, aby przetestować je przed wdrożeniem w środowisku produkcyjnym.

Zainstaluj interfejs wiersza polecenia Firebase

Aby użyć emulatora Cloud Functions, najpierw zainstaluj Firebase CLI:

npm install -g firebase-tools

Aby korzystać z lokalnego emulatora, Twoje Cloud Functions muszą być zależne od:

  • firebase-admin w wersji 8.0.0 lub nowszej.
  • firebase-functions wersji 3.0.0 lub nowszej.

Skonfiguruj poświadczenia administratora (opcjonalnie)

Jeśli chcesz, aby testy funkcji wchodziły w interakcje z interfejsami API Google lub innymi interfejsami API Firebase za pośrednictwem pakietu Firebase Admin SDK , może być konieczne skonfigurowanie danych logowania administratora.

  • Wyzwalacze Cloud Firestore i Realtime Database mają już wystarczające dane uwierzytelniające i nie wymagają dodatkowej konfiguracji.
  • Wszystkie inne interfejsy API, w tym interfejsy API Firebase, takie jak Uwierzytelnianie i FCM, lub Google API, takie jak Cloud Translation lub Cloud Speech, wymagają czynności konfiguracyjnych opisanych w tej sekcji. Ma to zastosowanie niezależnie od tego, czy używasz powłoki Cloud Functions, czy firebase emulators:start .

Aby skonfigurować poświadczenia administratora dla emulowanych funkcji:

  1. Otwórz panel Konta usług w Google Cloud Console.
  2. Upewnij się, że wybrane jest domyślne konto usługi App Engine , i użyj menu opcji po prawej stronie, aby wybrać opcję Utwórz klucz .
  3. Po wyświetleniu monitu wybierz JSON jako typ klucza i kliknij Utwórz .
  4. Ustaw domyślne dane logowania Google tak, aby wskazywały pobrany klucz:

    Uniks

    export GOOGLE_APPLICATION_CREDENTIALS="path/to/key.json"
    firebase emulators:start
    

    Okna

    set GOOGLE_APPLICATION_CREDENTIALS=path\to\key.json
    firebase emulators:start
    

Po wykonaniu tych czynności testy funkcji mogą uzyskiwać dostęp do interfejsów Firebase i Google API za pomocą pakietu Admin SDK . Na przykład podczas testowania wyzwalacza uwierzytelniania emulowana funkcja może wywołać admin.auth().getUserByEmail(email) .

Skonfiguruj konfigurację funkcji (opcjonalnie)

Jeśli używasz niestandardowych zmiennych konfiguracyjnych funkcji, najpierw uruchom polecenie, aby uzyskać niestandardową konfigurację (uruchom to w katalogu functions ) w środowisku lokalnym:

firebase functions:config:get > .runtimeconfig.json
# If using Windows PowerShell, replace the above with:
# firebase functions:config:get | ac .runtimeconfig.json

Uruchom pakiet emulatorów

Aby uruchomić emulator Cloud Functions, użyj polecenia emulators:start :

firebase emulators:start

Komenda emulators:start uruchomi emulatory Cloud Functions, Cloud Firestore, Realtime Database i Firebase Hosting na podstawie produktów zainicjowanych w lokalnym projekcie przy użyciu firebase init . Jeśli chcesz uruchomić konkretny emulator, użyj flagi --only :

firebase emulators:start --only functions

Jeśli chcesz uruchomić zestaw testów lub skrypt testowy po uruchomieniu emulatorów, użyj polecenia emulators:exec :

firebase emulators:exec "./my-test.sh"

Przygotuj swoją aplikację do komunikowania się z emulatorami

Aby instrumentować aplikację do interakcji z emulatorami, może być konieczne wykonanie dodatkowej konfiguracji.

Instrumentuj swoją aplikację pod kątem funkcji, które można wywoływać

Jeśli Twoje działania prototypowe i testowe obejmują wywoływalne funkcje zaplecza , skonfiguruj interakcję z emulatorem Cloud Functions for Firebase w następujący sposób:

Kotlin+KTX
// 10.0.2.2 is the special IP address to connect to the 'localhost' of
// the host computer from an Android emulator.
val functions = Firebase.functions
functions.useEmulator("10.0.2.2", 5001)
Java
// 10.0.2.2 is the special IP address to connect to the 'localhost' of
// the host computer from an Android emulator.
FirebaseFunctions functions = FirebaseFunctions.getInstance();
functions.useEmulator("10.0.2.2", 5001);
Szybki
Functions.functions().useEmulator(withHost: "localhost", port: 5001)

Web modular API

import { getApp } from "firebase/app";
import { getFunctions, connectFunctionsEmulator } from "firebase/functions";

const functions = getFunctions(getApp());
connectFunctionsEmulator(functions, "localhost", 5001);

Web namespaced API

firebase.functions().useEmulator("localhost", 5001);

Przygotuj swoją aplikację do emulacji funkcji HTTPS

Każda funkcja HTTPS w twoim kodzie będzie obsługiwana z lokalnego emulatora przy użyciu następującego formatu adresu URL:

http:// $HOST : $PORT / $PROJECT / $REGION / $NAME

Na przykład prosta funkcja helloWorld z domyślnym portem hosta i regionem byłaby obsługiwana w:

https://localhost:5001/ $PROJECT /us-central1/helloWorld

Przygotuj swoją aplikację do emulacji funkcji wyzwalanych w tle

Emulator Cloud Functions obsługuje funkcje uruchamiane w tle z następujących źródeł:

  • Emulator bazy danych czasu rzeczywistego
  • Emulator Cloud Firestore
  • Emulator uwierzytelniania
  • Emulator Pub/Sub

Aby wyzwalać zdarzenia w tle, zmodyfikuj zasoby zaplecza za pomocą interfejsu użytkownika Emulator Suite lub łącząc aplikację lub kod testowy z emulatorami za pomocą zestawu SDK dla swojej platformy.

Programy obsługi testów dla zdarzeń niestandardowych emitowanych przez rozszerzenia

W przypadku funkcji, które zaimplementujesz do obsługi niestandardowych zdarzeń Firebase Extensions za pomocą Cloud Functions v2, emulator Cloud Functions łączy się w parę z emulatorem Eventarc, aby obsługiwać wyzwalacze Eventarc .

Aby przetestować niestandardowe procedury obsługi zdarzeń dla rozszerzeń, które emitują zdarzenia, musisz zainstalować emulatory Cloud Functions i Eventarc.

Środowisko wykonawcze Cloud Functions ustawia zmienną środowiskową EVENTARC_EMULATOR na localhost:9299 w bieżącym procesie, jeśli emulator Eventarc jest uruchomiony. Pakiety SDK Firebase Admin automatycznie łączą się z emulatorem Eventarc, gdy ustawiona jest zmienna środowiskowa EVENTARC_EMULATOR . Domyślny port można zmodyfikować zgodnie z opisem w sekcji Konfigurowanie pakietu lokalnych emulatorów .

Gdy zmienne środowiskowe są prawidłowo skonfigurowane, pakiet Firebase Admin SDK automatycznie wysyła zdarzenia do emulatora Eventarc. Z kolei emulator Eventarc odwołuje się do emulatora Cloud Functions, aby uruchomić zarejestrowane moduły obsługi.

Możesz sprawdzić dzienniki funkcji w interfejsie użytkownika pakietu emulatorów, aby uzyskać szczegółowe informacje na temat wykonywania procedury obsługi.

Interakcje z innymi usługami

Pakiet emulatorów zawiera wiele emulatorów, które umożliwiają testowanie interakcji między produktami.

Cloud Firestore

Jeśli masz funkcje korzystające z Firebase Admin SDK do zapisywania w Cloud Firestore, te zapisy będą wysyłane do emulatora Cloud Firestore, jeśli jest uruchomiony. Jeśli te zapisy uruchomią dalsze funkcje, zostaną one uruchomione w emulatorze Cloud Functions.

Magazyn w chmurze

Jeśli masz funkcje korzystające z pakietu Firebase Admin SDK (wersja 9.7.0 lub nowsza) do zapisywania w Cloud Storage, te zapisy będą wysyłane do emulatora Cloud Storage, jeśli jest on uruchomiony. Jeśli te zapisy uruchomią dalsze funkcje, zostaną one uruchomione w emulatorze Cloud Functions.

Uwierzytelnianie Firebase

Jeśli masz funkcje korzystające z pakietu Firebase Admin SDK (wersja 9.3.0 lub nowsza) do zapisywania w uwierzytelnianiu Firebase, te zapisy zostaną wysłane do emulatora Auth, jeśli jest uruchomiony. Jeśli te zapisy uruchomią dalsze funkcje, zostaną one uruchomione w emulatorze Cloud Functions.

Hosting Firebase

Jeśli używasz Cloud Functions do generowania treści dynamicznych dla Hostingu Firebase , firebase emulators:start używają lokalnych funkcji HTTP jako serwerów proxy do hostingu.

Logowanie

Emulator przesyła strumieniowo logi z twoich funkcji do okna terminala, w którym są uruchamiane. Wyświetla wszystkie dane wyjściowe console.log() , console.info() , console.error() i console.warn() wewnątrz twoich funkcji.

Następne kroki

Aby zapoznać się z pełnym przykładem korzystania z pakietu emulatorów Firebase, zapoznaj się z testowym przewodnikiem szybkiego startu .