O Firebase Local Emulator Suite pode ser instalado e configurado para diferentes ambientes de prototipagem e teste, desde sessões de prototipagem únicas a fluxos de trabalho de integração contínua à escala de produção.
Instale o Conjunto de ferramentas do emulador local
Antes de instalar o Emulator Suite, precisa do seguinte:
Para instalar o Emulator Suite:
- Instale a Firebase CLI.
Se ainda não tiver a Firebase CLI instalada,
instale-a agora.
Precisa da versão 8.14.0 ou superior da CLI para usar o Emulator Suite. Pode
verificar que versão tem instalada através do seguinte comando:
firebase --version
- Se ainda não o fez, inicialize o diretório de trabalho atual
como um projeto do Firebase, seguindo as instruções apresentadas no ecrã para especificar que
produtos usar:
firebase init
- Configure o Emulator Suite. Este comando inicia um assistente de configuração que
lhe permite selecionar emuladores de interesse, transferir os ficheiros
binários do emulador correspondentes e definir portas do emulador se as predefinições não forem adequadas.
firebase init emulators
Depois de instalar um emulador, não são feitas verificações de atualizações nem ocorrem transferências automáticas adicionais até atualizar a versão da Firebase CLI.
Configure o Conjunto de ferramentas do emulador
Opcionalmente, pode configurar as portas de rede dos emuladores e o caminho para as definições das regras de segurança no ficheiro firebase.json:
- Altere as portas do emulador executando
firebase init emulatorsou editandofirebase.jsonmanualmente. - Altere o caminho para as definições das regras de segurança editando-o
firebase.jsonmanualmente.
Se não configurar estas definições, os emuladores vão ouvir nas respetivas portas predefinidas e os emuladores Cloud Firestore, Realtime Database e Cloud Storage for Firebase vão ser executados com segurança de dados aberta.
| Comando | Descrição |
|---|---|
| init emulators | Inicie um assistente de inicialização do emulador. Identifique os emuladores a instalar e, opcionalmente, especifique as definições de porta do emulador. init emulators não é destrutivo. Se aceitar as predefinições, a configuração atual do emulador é preservada. |
Configuração de portas
Cada emulador é associado a uma porta diferente na sua máquina com um valor predefinido preferencial.
| Emulador | Porta predefinida |
|---|---|
| Authentication | 9099 |
| App Hosting | 5002 |
| 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 |
Configuração do ID do projeto
Consoante a forma como invoca os emuladores, pode executar várias instâncias de um emulador com IDs de projetos do Firebase diferentes ou várias instâncias de emuladores para um determinado ID do projeto. Nesses casos, as instâncias do emulador são executadas num ambiente separado.
Geralmente, é uma boa prática definir um ID do projeto para todas as invocações do emulador, para que o Emulator Suite UI, os diferentes emuladores de produtos e todas as instâncias em execução de um determinado emulador possam comunicar corretamente em todos os casos.
O Local Emulator Suite emite avisos quando deteta vários IDs de projetos no ambiente, embora possa substituir este comportamento definindo a chave singleProjectMode como false no seu firebase.json.
Pode verificar se existem incompatibilidades nas declarações de IDs dos projetos nos seguintes locais:
- O projeto predefinido na linha de comandos. Por predefinição, o ID do projeto é obtido no arranque a partir do projeto selecionado com
firebase initoufirebase use. Para ver a lista de projetos (e ver qual está selecionado) usefirebase projects:list. - Testes de unidades de regras. O ID do projeto é frequentemente especificado em chamadas para os métodos da biblioteca de testes unitários de regras
initializeTestEnvironmentouinitializeTestApp. - A marca
--projectda linha de comandos. A transmissão da flag Firebase CLI--projectsubstitui o projeto predefinido. Tem de garantir que o valor do indicador corresponde ao ID do projeto nos testes unitários e na inicialização da app.
Verifique também as configurações de ID do projeto específicas da plataforma que definiu ao configurar os seus projetos de plataformas Apple, Android e Web.
Configuração das regras de segurança
Os emuladores vão obter a configuração das regras de segurança das chaves de configuração database,firestore e storage em 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"
}
}
}
Especificar opções Java
O emulador Realtime Database, o emulador Cloud Firestore e parte do emulador Cloud Storage for Firebase baseiam-se em Java, que pode ser personalizado com flags da JVM através da variável de ambiente JAVA_TOOL_OPTIONS.
Por exemplo, se tiver erros relacionados com o espaço de memória Java, pode aumentar o tamanho máximo da memória Java para 4 GB:
export JAVA_TOOL_OPTIONS="-Xmx4g"
firebase emulators:start
Podem ser especificadas várias flags entre aspas, separadas por espaços, como
JAVA_TOOL_OPTIONS="-Xms2g -Xmx4g". As flags afetam apenas os componentes baseados em Java dos emuladores e não têm efeito noutras partes da CLI Firebase, como Emulator Suite UI.
Inicie emuladores
Pode iniciar emuladores para serem executados até serem terminados manualmente ou para serem executados durante a duração de um script de teste designado e, em seguida, serem encerrados automaticamente.
| Comando | Descrição | ||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| emulators:start | Inicie os emuladores para os produtos do Firebase configurados em firebase.json.
Os processos do emulador continuam a ser executados até serem explicitamente parados. Calling
emulators:start will download the emulators to ~/.cache/firebase/emulators/ if
they are not already installed.
|
||||||||||||||
| emulators:exec scriptpath | Execute o script em scriptpath depois de iniciar os emuladores para os produtos Firebase
configurados em firebase.json. Os processos do emulador são interrompidos automaticamente quando o script termina a execução.
|
Geralmente, o método firebase emulators:exec é mais adequado para fluxos de trabalho de integração contínua.
Exporte e importe dados do emulador
Pode exportar dados dos emuladores Authentication, Cloud Firestore, Realtime Database e Cloud Storage for Firebase para usar como um conjunto de dados de base comum partilhável. Estes conjuntos de dados podem ser importados através da flag --import, conforme
descrito acima.
| emulators:export export_directory |
Authentication, Cloud Firestore, Realtime Database ou emulador Cloud Storage for Firebase.
Exporte dados de uma instância do emulador Cloud Firestore, Realtime Database ou Cloud Storage for Firebase em execução. O
Pode dar instruções aos emuladores para exportarem dados automaticamente quando são encerrados através das flags |
Faça a integração com o seu sistema de CI
Executar imagens contentorizadas do Emulator Suite
A instalação e a configuração do Emulator Suite com contentores numa configuração de CI típica são simples.
Existem alguns problemas a ter em atenção:
Os ficheiros JAR são instalados e colocados em cache em
~/.cache/firebase/emulators/.- Recomendamos que adicione este caminho à configuração da cache de CI para evitar transferências repetidas.
Se não tiver um ficheiro
firebase.jsonno seu repositório, tem de adicionar um argumento de linha de comandos ao comandoemulators:startouemulators:execpara especificar que emuladores devem ser iniciados. Por exemplo,--only functions,firestore.
Gere um token de autorização (apenas para o emulador de alojamento)
Se os seus fluxos de trabalho de integração contínua dependerem do Firebase Hosting , tem de iniciar sessão com um token para executar o firebase emulators:exec. Os outros emuladores não requerem início de sessão.
Para gerar um token, execute firebase login:ci no seu ambiente local. Este procedimento não deve ser realizado a partir de um sistema de CI. Siga as instruções para autenticar. Só tem de realizar este passo uma vez por projeto, uma vez que o token é válido em todas as compilações. O token deve ser tratado como uma palavra-passe. Certifique-se de que o mantém em segredo.
Se o seu ambiente de CI lhe permitir especificar variáveis de ambiente que podem ser usadas nos scripts de compilação, basta criar uma variável de ambiente denominada FIREBASE_TOKEN, com o valor a ser a string do token de acesso. A CLI do Firebase
vai selecionar automaticamente a variável de ambiente FIREBASE_TOKEN e os
emuladores vão ser iniciados corretamente.
Em último recurso, pode simplesmente incluir o token no script de compilação, mas certifique-se de que as partes não fidedignas não têm acesso. Para esta abordagem codificada, pode adicionar --token "YOUR_TOKEN_STRING_HERE" ao comando firebase emulators:exec.
Use a API REST do Emulator Hub
Apresente os emuladores em execução
Para listar os emuladores em execução, envie um pedido GET para o ponto final /emulators do Emulator Hub.
curl localhost:4400/emulatorsO resultado é um objeto JSON que lista todos os emuladores em execução e a respetiva configuração de anfitrião/porta, por exemplo:
{
"hub":{
"name": "hub",
"host": "localhost",
"port": 4400
},
"functions": {
"name": "functions",
"host": "localhost",
"port": 5001
}
"firestore": {
"name": "firestore",
"host": "localhost",
"port": 8080
}
}
Ative / desative acionadores de funções em segundo plano
Em algumas situações, tem de desativar temporariamente a função local e os acionadores de extensão. Por exemplo, pode querer eliminar todos os dados no
emulador Cloud Firestore sem acionar funções onDelete que estejam a ser executadas nos emuladores Cloud Functions ou Extensions.
Para desativar temporariamente os acionadores de funções locais, envie um pedido PUT para o ponto final /functions/disableBackgroundTriggers do Emulator Hub.
curl -X PUT localhost:4400/functions/disableBackgroundTriggersO resultado é um objeto JSON que detalha o estado atual.
{
"enabled": false
}
Para ativar os acionadores de funções locais depois de terem sido desativados, envie um PUT
pedido para o ponto final /functions/enableBackgroundTriggers do centro do emulador.
curl -X PUT localhost:4400/functions/enableBackgroundTriggersO resultado é um objeto JSON que detalha o estado atual.
{
"enabled": true
}
Integrações do SDK do emulador
As tabelas nesta secção indicam que emuladores são suportados pelos SDKs de cliente e de administrador. Futuro significa que o suporte de emuladores está planeado, mas ainda não está disponível.
Disponibilidade do SDK cliente
| Android | Plataformas Apple | Web |
Firebase UI Android |
Firebase UI iOS |
Firebase UI Web |
|
|---|---|---|---|---|---|---|
| Realtime Database | 19.4.0 | 7.2.0 | 8.0.0 | 6.4.0 | Futuro | N/A |
| Cloud Firestore | 21.6.0 | 7.2.0 | 8.0.0 | 6.4.0 | Futuro | N/A |
| 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/A |
| Cloud Functions | 19.1.0 | 7.2.0 | 8.0.0 | N/A | 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/A |
Disponibilidade do SDK Admin
| Node | 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/A | N/A | N/A | N/A |
| Hosting | N/A | N/A | N/A | N/A |
| Extensions | N/A | N/A | N/A | N/A |