La Firebase Local Emulator Suite può essere installata e configurata per diversi ambienti di test e prototipi, da sessioni di prototipazione una tantum a flussi di lavoro di integrazione continua su scala di produzione.
Installa la suite dell'emulatore locale
Prima di installare Emulator Suite avrai bisogno di:
Per installare Emulator Suite:
- Installa l' interfaccia a riga di comando di Firebase . Se non hai già installato l'interfaccia a riga di comando di Firebase, installala ora . Avrai bisogno della versione CLI 8.14.0 o successiva per utilizzare Emulator Suite. Puoi controllare quale versione hai installato usando il seguente comando:
firebase --version
- Se non lo hai già fatto, inizializza la directory di lavoro corrente come progetto Firebase, seguendo le istruzioni sullo schermo per specificare quali prodotti utilizzare:
firebase init
- Configura la suite di emulatori. Questo comando avvia una procedura guidata di configurazione che consente di selezionare gli emulatori di interesse, scaricare i file binari dell'emulatore corrispondenti e impostare le porte dell'emulatore se le impostazioni predefinite non sono appropriate.
firebase init emulators
Una volta installato un emulatore, non vengono eseguiti controlli di aggiornamento e non si verificheranno ulteriori download automatici fino a quando non aggiorni la versione dell'interfaccia a riga di comando di Firebase.
Configura la suite dell'emulatore
Facoltativamente, puoi configurare le porte di rete degli emulatori e il percorso delle definizioni delle regole di sicurezza nel file firebase.json
:
- Modifica le porte dell'emulatore eseguendo
firebase init emulators
o modificando manualmentefirebase.json
. - Modificare il percorso delle definizioni delle regole di sicurezza modificando
firebase.json
manualmente.
Se non configuri queste impostazioni, gli emulatori ascolteranno sulle loro porte predefinite e gli emulatori Cloud Firestore, Realtime Database e Cloud Storage per Firebase funzioneranno con la sicurezza dei dati aperti.
Comando | Descrizione |
---|---|
emulatori init | Avvia una procedura guidata di inizializzazione dell'emulatore. Identifica gli emulatori da installare e, facoltativamente, specifica le impostazioni della porta dell'emulatore. init emulators non sono distruttivi; l'accettazione dei valori predefiniti manterrà la configurazione corrente dell'emulatore. |
Configurazione della porta
Ogni emulatore si collega a una porta diversa sulla tua macchina con un valore predefinito preferito.
Emulatore | Porta predefinita |
---|---|
Autenticazione | 9099 |
Interfaccia utente della suite di emulatori | 4000 |
Funzioni cloud | 5001 |
Eventarc | 9299 |
Database in tempo reale | 9000 |
CloudFirestore | 8080 |
Archiviazione cloud per Firebase | 9199 |
Hosting Firebase | 5000 |
Pub/Sub | 8085 |
Configurazione ID progetto
A seconda di come si richiamano gli emulatori, è possibile eseguire più istanze di un emulatore utilizzando diversi ID progetto Firebase o più istanze dell'emulatore per un determinato ID progetto. In tali casi, le istanze dell'emulatore vengono eseguite in un ambiente separato.
In genere è consigliabile impostare un ID progetto per tutte le chiamate dell'emulatore, in modo che l'interfaccia utente di Emulator Suite, diversi emulatori di prodotto e tutte le istanze in esecuzione di un particolare emulatore possano comunicare correttamente in tutti i casi.
Local Emulator Suite emette avvisi quando rileva più ID progetto nell'ambiente, anche se puoi eseguire l'override di questo comportamento impostando la chiave singleProjectMode
su false
nel tuo firebase.json
.
È possibile controllare le dichiarazioni di ID progetto per mancate corrispondenze in:
- Il progetto predefinito nella riga di comando. Per impostazione predefinita, l'ID progetto verrà preso all'avvio dal progetto selezionato con
firebase init
ofirebase use
. Per visualizzare l'elenco dei progetti (e vedere quale è selezionato) utilizzarefirebase projects:list
. - Unit test delle regole. L'ID progetto viene spesso specificato nelle chiamate ai metodi della libreria di unit test delle regole
initializeTestEnvironment
oinitializeTestApp
. - Il flag
--project
della riga di comando. Il passaggio del flag--project
della CLI di Firebase sovrascrive il progetto predefinito. Dovrai assicurarti che il valore del flag corrisponda all'ID progetto nei test unitari e nell'inizializzazione dell'app.
Controlla anche le configurazioni degli ID progetto specifiche della piattaforma che hai impostato durante la configurazione delle piattaforme Apple , Android e dei progetti web .
Configurazione delle regole di sicurezza
Gli emulatori prenderanno la configurazione delle regole di sicurezza dal database
, firestore
e dalle chiavi di configurazione 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 dell'emulatore Cloud Storage for Firebase sono basati 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 dell'heap Java, è possibile aumentare la dimensione massima dell'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 influiscono solo sui componenti basati su Java degli emulatori e non hanno alcun effetto su altre parti dell'interfaccia a riga di comando di Firebase, come l'interfaccia utente di Emulator Suite.
Avvia gli emulatori
È possibile avviare gli emulatori per l'esecuzione fino a quando non vengono terminati manualmente o per l'esecuzione per la durata di uno script di test designato, quindi arrestarsi automaticamente.
Comando | Descrizione | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
emulatori: start | Avvia gli emulatori per i prodotti Firebase configurati in firebase.json . I processi dell'emulatore continueranno a essere eseguiti fino a quando non verranno arrestati in modo esplicito. Calling emulators:start scaricherà gli emulatori in ~/.cache/firebase/emulators/ se non sono già installati.
| ||||||||||||
emulatori: scriptpath exec | Esegui lo script in scriptpath dopo aver avviato gli emulatori per i prodotti Firebase configurati in firebase.json . I processi dell'emulatore si interromperanno automaticamente al termine dell'esecuzione dello script.
|
Il metodo firebase emulators:exec
è generalmente più appropriato per i flussi di lavoro di integrazione continua.
Esporta e importa i dati dell'emulatore
Puoi esportare i dati dagli emulatori di autenticazione, Cloud Firestore, Realtime Database e Cloud Storage per Firebase da utilizzare come set di dati di riferimento comuni e condivisibili. Questi set di dati possono essere importati utilizzando il flag --import
, come descritto sopra.
emulatori: export export_directory | Autenticazione, Cloud Firestore, Realtime Database o Cloud Storage per l'emulatore Firebase . Esporta i dati da un'istanza dell'emulatore Cloud Firestore, Realtime Database o Cloud Storage for Firebase in esecuzione. La Puoi istruire gli emulatori a esportare i dati automaticamente quando si chiudono usando i flag |
Integrazione con il tuo sistema CI
Esecuzione di immagini Emulator Suite containerizzate
L'installazione e la configurazione di Emulator Suite con container in una tipica configurazione CI è semplice.
Ci sono alcuni problemi da notare:
I file JAR vengono installati e memorizzati nella cache in
~/.cache/firebase/emulators/
.- Potresti voler aggiungere questo percorso alla configurazione della cache CI per evitare download ripetuti.
Se non si dispone di un file
firebase.json
nel repository, è necessario aggiungere un argomento della riga di comando al comandoemulators:start
oemulators:exec
per specificare quali emulatori devono essere avviati. Per esempio,
--only functions,firestore
.
Genera un token di autenticazione (solo emulatore di hosting)
Se i tuoi flussi di lavoro di integrazione continua si basano su Firebase Hosting , dovrai accedere utilizzando un token per eseguire firebase emulators:exec
. Gli altri emulatori non richiedono il login.
Per generare un token, esegui firebase login:ci
nel tuo ambiente locale; questo non dovrebbe essere eseguito da un sistema CI. Segui le istruzioni per autenticarti. Dovresti eseguire questo passaggio solo una volta per progetto, poiché il token sarà valido tra le build. Il token dovrebbe essere trattato come una password; assicurati che sia tenuto segreto.
Se il tuo ambiente CI ti consente di specificare le variabili di ambiente che possono essere utilizzate negli script di compilazione, crea semplicemente una variabile di ambiente chiamata FIREBASE_TOKEN
, con il valore che è la stringa del token di accesso. L'interfaccia a riga di comando di Firebase rileverà automaticamente la variabile di ambiente FIREBASE_TOKEN
e gli emulatori si avvieranno 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 hard-coded, puoi aggiungere --token "YOUR_TOKEN_STRING_HERE"
al comando firebase emulators:exec
.
Utilizzare l'API REST dell'hub dell'emulatore
Elenca gli emulatori in esecuzione
Per elencare gli emulatori attualmente in esecuzione, invia una richiesta GET
all'endpoint /emulators
dell'hub dell'emulatore.
curl localhost:4400/emulators
Il risultato sarà un oggetto JSON che elenca tutti gli emulatori in esecuzione e la loro 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
}
}
Abilita / Disabilita trigger funzione in background
In alcune situazioni sarà necessario disabilitare temporaneamente la funzione locale e i trigger di estensione. Ad esempio, potresti voler eliminare tutti i dati nell'emulatore Cloud Firestore senza attivare alcuna funzione onDelete
in esecuzione negli emulatori Cloud Functions o Extensions.
Per disabilitare temporaneamente i trigger di funzione locale, invia una richiesta PUT
all'endpoint /functions/disableBackgroundTriggers
dell'hub dell'emulatore.
curl -X PUT localhost:4400/functions/disableBackgroundTriggers
Il risultato sarà un oggetto JSON che dettaglia lo stato corrente.
{
"enabled": false
}
Per abilitare i trigger di funzione locali dopo che sono stati disabilitati, invia una richiesta PUT
all'endpoint /functions/enableBackgroundTriggers
dell'hub dell'emulatore.
curl -X PUT localhost:4400/functions/enableBackgroundTriggers
Il risultato sarà un oggetto JSON che dettaglia lo stato corrente.
{
"enabled": true
}
Integrazioni dell'SDK dell'emulatore
Le tabelle in questa sezione indicano quali emulatori sono supportati dal client e dagli SDK di amministrazione. Futuro significa che il supporto dell'emulatore è pianificato ma non ancora disponibile.
Disponibilità dell'SDK client
Androide | Piattaforme Apple | ragnatela | Interfaccia utente Firebase Androide | Interfaccia utente Firebase iOS | Interfaccia utente Firebase ragnatela | |
---|---|---|---|---|---|---|
Database in tempo reale | 19.4.0 | 7.2.0 | 8.0.0 | 6.4.0 | Futuro | N / A |
CloudFirestore | 21.6.0 | 7.2.0 | 8.0.0 | 6.4.0 | Futuro | N / A |
Autenticazione | 20.0.0 | 7.0.0 | 8.0.0 | 7.0.0 | Futuro | 4.7.2 |
Archiviazione cloud per Firebase | 20.0.0 | 8.0.0 | 8.4.0 | 7.0.0 | 11.0.0 | N / A |
Funzioni cloud | 19.1.0 | 7.2.0 | 8.0.0 | N / A | N / A | N / A |
Ospitando | N / A | N / A | N / A | N / A | N / A | N / A |
Estensioni | N / A | N / A | N / A | N / A | N / A | N / A |
Disponibilità dell'SDK di amministrazione
Nodo | Giava | Pitone | Andare | |
---|---|---|---|---|
Database in tempo reale | 8.6.0 | 6.10.0 | 2.18.0 | Futuro |
CloudFirestore | 8.0.0 | 6.10.0 | 3.0.0 | 1.0.0 |
Autenticazione | 9.3.0 | 7.2.0 | 5.0.0 | 4.2.0 |
Archiviazione cloud per Firebase | 9.8.0 | Futuro | Futuro | Futuro |
Funzioni cloud | N / A | N / A | N / A | N / A |
Ospitando | N / A | N / A | N / A | N / A |
Estensioni | N / A | N / A | N / A | N / A |