Installare, configurare e integrare Local Emulator Suite

Firebase Local Emulator Suite può essere installato e configurato per diverse ambienti di prototipazione e test, da sessioni di prototipazione una tantum a flussi di lavoro di integrazione continua in produzione.

Installa Local Emulator Suite

Prima di installare Emulator Suite, avrai bisogno di:

  • Node.js versione 16.0 o successive.
  • Java JDK versione 11 o successive.

Per installare Emulator Suite:

  1. Installa l'interfaccia a riga di comando Firebase. Se non hai ancora installato l'interfaccia a riga di comando di Firebase, installalo ora. Per utilizzare Emulator Suite, è necessaria l'interfaccia a riga di comando 8.14.0 o versioni successive. Puoi verifica quale versione hai installato utilizzando il seguente comando:
    firebase --version
  2. Se non l'hai ancora fatto, inizializza la directory di lavoro attuale come progetto Firebase, seguendo le istruzioni sullo schermo per specificare prodotti da utilizzare:
    firebase init
  3. Configura Emulator Suite. Questo comando avvia una configurazione guidata consente di selezionare gli emulatori che ti interessano, di scaricare quello corrispondente e impostare le porte dell'emulatore se i valori predefiniti non sono appropriati.
    firebase init emulators

Una volta installato un emulatore, non vengono eseguiti controlli di aggiornamento e non verranno eseguiti ulteriori download automatici finché non aggiornerai la versione dell'interfaccia a riga di comando di Firebase.

Configura Emulator Suite

Facoltativamente, puoi configurare l'emulatore porte di rete e percorso Security Definizioni delle regole nel file firebase.json:

  • Cambia le porte dell'emulatore eseguendo firebase init emulators o modificando firebase.json manualmente.
  • Cambia il percorso delle definizioni delle regole di sicurezza modificando firebase.json manualmente.

Se non configuri queste impostazioni, gli emulatori rimarranno in ascolto sui loro porte predefinite e Cloud Firestore, Realtime Database e Cloud Storage for Firebase gli emulatori funzionano con una sicurezza dei dati aperta.

Comando Descrizione
emulatori init Avvia una procedura guidata di inizializzazione dell'emulatore. Identifica gli emulatori da installare e, facoltativamente, specifica le impostazioni delle porte dell'emulatore. init emulators non è distruttivo; se accetti i valori predefiniti, verrà conservata l'attuale configurazione dell'emulatore.

Configurazione delle porte

Ogni emulatore si associa a una porta diversa sul tuo computer con un'impostazione predefinita preferita valore.

Emulatore Porta predefinita
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

Configurazione dell'ID progetto

A seconda di come richiami gli emulatori, puoi eseguire più istanze di un utilizzando ID progetto Firebase diversi o più istanze dell'emulatore per un determinato ID progetto. In questi casi, le istanze dell'emulatore sono in esecuzione un ambiente separato.

Generalmente è buona norma impostare un solo ID progetto per tutti gli emulatori di chiamata, quindi Emulator Suite UI, diversi emulatori di prodotti e tutti di un particolare emulatore, possono comunicare correttamente d'uso diversi.

Local Emulator Suite emette avvisi quando rileva più ID progetto nell'ambiente, anche se puoi ignorare questo comportamento impostando la chiave singleProjectMode su false in firebase.json.

Puoi verificare l'eventuale presenza di mancate corrispondenze nelle dichiarazioni degli ID progetto nei seguenti paesi:

  • Il progetto predefinito nella riga di comando. Per impostazione predefinita, l'ID progetto all'avvio dal progetto selezionato con firebase init oppure firebase use. Per visualizzare l'elenco dei progetti (e vedere quale è selezionato) usa firebase projects:list.
  • Test delle unità di regole. L'ID progetto viene spesso specificato nelle chiamate alle regole Metodi della libreria di test delle unità initializeTestEnvironment o initializeTestApp.
  • Il flag --project della riga di comando. Superamento dell'interfaccia a riga di comando Firebase Il flag --project sostituisce il progetto predefinito. Devi assicurarti che il valore del flag corrisponde all'ID progetto nei test delle unità e nell'inizializzazione dell'app.

Controlla anche le configurazioni degli ID progetto specifici della piattaforma che hai impostato durante la configurazione dei progetti per le piattaforme Apple, Android e web.

Configurazione delle regole di sicurezza

Gli emulatori acquisiranno la configurazione delle regole di sicurezza da database, Chiavi di configurazione firestore e storage in 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"
    }
  }
}

Specifica delle opzioni Java

L'emulatore Realtime Database, l'emulatore Cloud Firestore e parte di L'emulatore Cloud Storage for Firebase si basa su Java, che può essere personalizzato con flag JVM tramite la variabile di ambiente JAVA_TOOL_OPTIONS.

Ad esempio, se si verificano errori relativi allo spazio dello heap Java, puoi aumentare la dimensione massima dello heap Java a 4 GB:

export JAVA_TOOL_OPTIONS="-Xmx4g"
firebase emulators:start

È possibile specificare più flag tra virgolette separate da spazi, come JAVA_TOOL_OPTIONS="-Xms2g -Xmx4g". I flag interessano solo i flag basati su Java componenti dell'emulatore e non hanno alcun effetto su altre parti Interfaccia a riga di comando Firebase, ad esempio Emulator Suite UI.

Avvia gli emulatori

Puoi avviare l'esecuzione degli emulatori finché non termina manualmente oppure di uno script di test designato, per poi arrestarsi automaticamente.

Comando Descrizione
emultors:start Avvia emulatori per i prodotti Firebase configurati in firebase.json. I processi dell'emulatore continueranno a essere eseguiti fino all'arresto esplicito. Chiamata in corso emulators:start scaricherà gli emulatori in ~/.cache/firebase/emulators/ se non sono già installati.
Flag Descrizione
--only Facoltativo. Limita gli emulatori che si avviano. Fornisci un elenco separato da virgole di nomi di emulatori, specificando uno o più di "auth", "database", "firestore", "functions", "hosting" o "pubsub".
--inspect-functions debug_port Facoltativo. Da utilizzare con emulatore Cloud Functions per attivare il debug del punto di interruzione delle funzioni nel punto specificato (o la porta predefinita 9229 se l'argomento omesso). Tieni presente che, se viene fornito questo flag, l'emulatore Cloud Functions passa a una modalità di esecuzione serializzata speciale in cui le funzioni vengono eseguite in un singolo processo, in ordine sequenziale (FIFO); questo semplifica il debug delle funzioni, anche se il comportamento è diverso dall'esecuzione parallela multi-processo delle funzioni nel cloud.
--export-on-exit= Facoltativo. Usalo con Authentication, Cloud Firestore, Realtime Database o emulatore Cloud Storage for Firebase. Chiedi agli emulatori di esportare i dati in una all'arresto, come descritto per emulators:export . La directory di esportazione può essere specificata con questo flag: firebase emulators:start --export-on-exit=./saved-data. Se viene utilizzato --import, il percorso di esportazione sarà lo stesso per impostazione predefinita. Ad esempio: firebase emulators:start --import=./data-path --export-on-exit. Infine, se vuoi, passa diversi percorsi di directory a --import e --export-on-exit flag.
--import=import_directory Facoltativo. Da utilizzare con l'emulatore Authentication, Cloud Firestore, Realtime Database o Cloud Storage for Firebase. Importa i dati salvati utilizzando Opzione di avvio --export-on-exit o emulators:export su un comando Authentication, Cloud Firestore, Realtime Database o dell'emulatore Cloud Storage for Firebase. Tutti i dati attualmente presenti nella memoria dell'emulatore in modo eccessivo.
emulators:exec scriptpath Esegui lo script in scriptpath dopo aver avviato gli emulatori per i prodotti Firebase configurati in firebase.json. I processi dell'emulatore si interrompono automaticamente quando dell'esecuzione dello script.
Flag Descrizione
--only Facoltativo. Limite da quali emulatori. Fornisci un elenco di nomi di emulatori separati da virgole, specificando uno o più di "firestore", "database", "functions", "hosting" o "pubsub".
--inspect-functions debug_port Facoltativo. Da utilizzare con l'emulatore Cloud Functions per attivare il debug dei breakpoint delle funzioni sulla porta specificata (o sulla porta predefinita 9229 se l'argomento viene omesso). Tieni presente che quando viene fornito, l'emulatore Cloud Functions passa a uno speciale flag in cui le funzioni vengono eseguite in un singolo processo, ordine sequenziale (FIFO); questo semplifica il debug delle funzioni, sebbene il comportamento differisce dall'esecuzione parallela e multi-processo delle funzioni nel cloud.
--export-on-exit= Facoltativo. Usalo con Authentication, Cloud Firestore, Realtime Database o emulatore Cloud Storage for Firebase. Chiedi agli emulatori di esportare i dati in una all'arresto, come descritto per emulators:export . La directory di esportazione può essere specificata con questo flag: firebase emulators:start --export-on-exit=./saved-data. Se viene utilizzato --import, il percorso di esportazione sarà lo stesso per impostazione predefinita. Ad esempio: firebase emulators:start --import=./data-path --export-on-exit. Infine, se vuoi, passa diversi percorsi di directory a --import e --export-on-exit flag.
--import=import_directory Facoltativo. Usalo con Authentication, Cloud Firestore, Realtime Database o emulatore Cloud Storage for Firebase. Importa i dati salvati utilizzando Opzione di avvio --export-on-exit o emulators:export su un comando Authentication, Cloud Firestore, Realtime Database o dell'emulatore Cloud Storage for Firebase. Tutti i dati attualmente nella memoria dell'emulatore verranno sovrascritti.
--ui Facoltativo. Esegui l'interfaccia utente dell'emulatore durante l'esecuzione.

Il metodo firebase emulators:exec è in genere più appropriato per flussi di lavoro di integrazione continua.

Esporta e importa i dati dell'emulatore

Puoi esportare i dati da Authentication, Cloud Firestore, Realtime Database e emulatori Cloud Storage for Firebase da utilizzare come dati di riferimento comuni e condivisibili per iniziare. Questi set di dati possono essere importati utilizzando il flag --import, come descritti sopra.

emulatori:esportazione export_directory

Emulatore Authentication, Cloud Firestore, Realtime Database o Cloud Storage for Firebase. Esporta i dati da un oggetto Cloud Firestore, Realtime Database o Cloud Storage for Firebase in esecuzione dell'emulatore di codice. In questo caso, l'elemento export_directory specificato verrà creato non esistono già. Se la directory specificata esiste, ti verrà chiesto di confermare che i dati delle esportazioni precedenti dovrebbero essere sovrascritti. Puoi saltare questo prompt utilizzando il comando --force. La directory di esportazione contiene un file manifest dei dati, firebase-export-metadata.json.

Puoi indicare agli emulatori di esportare automaticamente i dati all'arresto utilizzando --export-on-exit flag descritti sopra.

Integrazione con il sistema CI

Esecuzione di immagini di Emulator Suite containerizzate

Installazione e configurazione di Emulator Suite con container in un tipica configurazione CI è semplice.

Ci sono alcuni problemi da considerare:

  • I file JAR vengono installati e memorizzati nella cache su ~/.cache/firebase/emulators/.

    • Ti consigliamo di aggiungere questo percorso alla configurazione della cache CI per evitare download ripetuti.
  • Se il repository non contiene un file firebase.json, devi aggiungere un l'argomento della riga di comando al comando emulators:start o emulators:exec per specificare quali emulatori devono essere avviati. Ad esempio:
    --only functions,firestore.

Genera un token di autenticazione (solo emulatore di Hosting)

Se i flussi di lavoro di integrazione continua si basano su Firebase Hosting, dovrà accedere utilizzando un token per poter eseguire firebase emulators:exec. Gli altri emulatori non richiedono l'accesso.

Per generare un token, esegui firebase login:ci nel tuo ambiente locale. Questa operazione non deve essere eseguita da un sistema CI. Segui le istruzioni per l'autenticazione. Dovresti eseguire questo passaggio solo una volta per progetto, poiché il token sarà valido in tutte le build. Il token deve essere trattato come una password; assicurati che venga mantenuto segreto.

Se il tuo ambiente CI ti consente di specificare variabili di ambiente che possono essere utilizzata negli script di build, è sufficiente creare una variabile di ambiente FIREBASE_TOKEN, dove il valore è la stringa del token di accesso. Interfaccia a riga di comando di Firebase raccoglierà automaticamente la variabile di ambiente FIREBASE_TOKEN e emulatori si avviano correttamente.

Come ultima risorsa, puoi semplicemente includere il token nello script di compilazione, ma assicurati che le parti non attendibili non abbiano accesso. Per questo approccio hardcoded, puoi aggiungere --token "YOUR_TOKEN_STRING_HERE" al comando firebase emulators:exec.

Usa l'API REST Emulator Hub

Elenco emulatori in esecuzione

Per elencare gli emulatori attualmente in esecuzione, invia una richiesta GET all'/emulators dell'Emulator Hub.

curl localhost:4400/emulators

Il risultato sarà un oggetto JSON che elenca tutti gli emulatori in esecuzione e i relativi configurazione host/porta, ad esempio:

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

Attiva / disattiva trigger di funzioni in background

In alcune situazioni dovrai disattivare temporaneamente la funzione locale e gli attivatori delle estensioni. Ad esempio, potresti voler eliminare tutti i dati nel emulatore Cloud Firestore senza attivare alcuna funzione onDelete che sono in esecuzione negli emulatori Cloud Functions o Extensions.

Per disattivare temporaneamente i trigger di funzione locale, invia una richiesta PUT al Endpoint /functions/disableBackgroundTriggers dell'Emulator Hub.

curl -X PUT localhost:4400/functions/disableBackgroundTriggers

Il risultato sarà un oggetto JSON che descrive in dettaglio lo stato attuale.

{
  "enabled": false
}

Per attivare i trigger di funzioni locali dopo che sono stati disabilitati, invia un PUT richiesta all'endpoint /functions/enableBackgroundTriggers dell'emulatore Hub.

curl -X PUT localhost:4400/functions/enableBackgroundTriggers

Il risultato sarà un oggetto JSON che descrive in dettaglio lo stato attuale.

{
  "enabled": true
}

Integrazioni dell'SDK dell'emulatore

Le tabelle in questa sezione indicano quali emulatori sono supportati dal client e SDK amministrativi. Futuro significa che il supporto dell'emulatore è pianificato, ma non ancora. disponibili.

Disponibilità dell'SDK client

Android Piattaforme Apple Web Firebase UI
Android
UI di Firebase
iOS
UI di Firebase
Web
Realtime Database 19.4.0 7.2.0 8.0.0 6.4.0 Futuro N/D
Cloud Firestore 21.6.0 7.2.0 8.0.0 6.4.0 Futuro N/D
Authentication 20,0,0 7.0.0 8.0.0 7.0.0 Futuro 4.7.2
Cloud Storage for Firebase 20,0,0 8.0.0 8.4.0 7.0.0 11.0.0 N/D
Cloud Functions 19.1.0 7.2.0 8.0.0 N/D N/A N/A
Hosting N/A N/A N/A N/A N/A N/A
Extensions N/A N/A N/A N/A N/A N/D

Disponibilità dell'SDK Admin

Nodo Java Python Go
Realtime Database 8.6.0 6.10.0 2.18.0 Futuro
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 Futuro Futuro Futuro
Cloud Functions N/D N/A N/A N/A
Hosting N/A N/A N/A N/A
Extensions N/A N/A N/A N/D