O Pacote do emulador local do Firebase pode ser instalado e configurado para diferentes ambientes de protótipo e teste, desde sessões de prototipagem únicas até fluxos de trabalho de integração contínua em escala de produção.
Instalar o Pacote de emuladores locais
Antes de instalar o Pacote de emuladores, você precisará de:
Para instalar o Pacote de emuladores, siga as etapas a seguir:
- Instale a CLI do Firebase.
Se você ainda não instalou a CLI do Firebase, faça a instalação agora mesmo.
Você precisará da CLI versão 8.14.0 ou posterior para usar o conjunto de emuladores. É possível verificar qual versão está instalada usando o seguinte comando:
firebase --version
- Se ainda não tiver feito isso, inicialize o diretório de trabalho atual como um projeto do Firebase, seguindo as instruções na tela para especificar quais produtos usar:
firebase init
- Configure o Pacote do emulador. Este comando inicia um assistente de configuração que permite selecionar emuladores do seu interesse, fazer o download dos arquivos binários do emulador correspondentes e definir as portas do emulador se os padrões não forem apropriados.
firebase init emulators
Depois que um emulador for instalado, nenhuma verificação de atualização será realizada e nenhum download automático adicional ocorrerá até que você atualize a versão da CLI do Firebase.
Configurar o Pacote do emulador
Como opção, você pode configurar as portas de rede dos emuladores e o caminho para as definições
de regras de segurança no arquivo firebase.json
:
- Altere as portas do emulador executando
firebase init emulators
ou editandofirebase.json
manualmente. - Altere o caminho para as definições de regras de segurança editando
firebase.json
manualmente.
Se você não definir essas configurações, os emuladores ouvirão nas portas padrão, e os emuladores do Cloud Firestore, Realtime Database e Cloud Storage serão executados com segurança de dados aberta.
Comando | Descrição |
---|---|
emuladores init | Inicie um assistente de inicialização do emulador. Identifique os emuladores a serem instalados e, opcionalmente, especifique as configurações da porta do emulador. init emulators não é destrutivo; se você aceitar os padrões, a configuração atual do emulador será preservada. |
Configuração da porta
Cada emulador é vinculado a uma porta diferente na sua máquina com um valor padrão preferido.
Emulador | Porta padrão |
---|---|
Authentication | 9099 |
IU do Pacote do Emulador | 4000 |
Cloud Functions | 5001 |
Realtime Database | 9000 |
Cloud Firestore | 8080 |
Cloud Storage | 9199 |
Firebase Hosting | 5000 |
Pub/Sub | 8085 |
Configuração das regras de segurança
Os emuladores utilizarão 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": {
"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"
}
}
}
Como especificar opções do Java
O emulador do Realtime Database, o emulador do Cloud Firestore e parte do emulador do Cloud Storage são baseados em Java. Isso significa que eles podem ser personalizados com sinalizações JVM usando a variável de ambiente JAVA_TOOL_OPTIONS
.
Por exemplo, se ocorrer um erro relacionado ao espaço de heap do Java, será possível aumentar o tamanho máximo do heap do Java para 4 GB:
export JAVA_TOOL_OPTIONS="-Xmx4g"
firebase emulators:start
Várias sinalizações podem ser especificadas entre aspas separadas por espaços, como
JAVA_TOOL_OPTIONS="-Xms2g -Xmx4g"
. As sinalizações afetam apenas os componentes baseados em Java
dos emuladores e não têm efeito em outras partes da CLI do Firebase, como
a IU do Pacote de emuladores.
Iniciar emuladores
É possível iniciar os emuladores para serem executados até serem encerrados manualmente ou para serem executados durante um script de teste designado e depois encerrados automaticamente.
Comando | Descrição | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
emulators:start | Inicie emuladores para os produtos do Firebase configurados em firebase.json .
Os processos do emulador continuarão em execução até serem explicitamente interrompidos. Chame emulators:start para fazer o download dos emuladores em ~/.cache/firebase/emulators/ se eles ainda não estiverem instalados.
|
||||||||||||
emulators:exec scriptpath | Execute o script em scriptpath depois de iniciar emuladores para os produtos do Firebase configurados em firebase.json . Os processos do emulador serão interrompidos automaticamente quando a execução do script for concluída.
|
O método firebase emulators:exec
geralmente é mais apropriado para
fluxos de trabalho de integração contínua.
Exportar e importar dados do emulador
É possível exportar dados dos emuladores do Authentication, Cloud Firestore, Realtime Database e Cloud Storage
para usar como um conjunto de dados de referência comum compartilhável. Esses conjuntos de dados podem
ser importados usando a sinalização --import
, conforme descrito acima.
emulators:export export_directory |
Emulador do Authentication, Cloud Firestore, Realtime Database ou Cloud Storage. Exportar dados de uma instância de emulador
do Cloud Firestore, Realtime Database ou Cloud Storage em execução. O
Instrua os emuladores a exportar dados automaticamente quando forem desligados usando as sinalizações
|
Integrar com o sistema de CI
Como executar imagens do Pacote de emuladores em contêiner
A instalação e a configuração do Pacote do emulador com contêineres em uma configuração de CI típica são simples.
Fique atento a alguns problemas:
Os arquivos JAR são instalados e armazenados em cache em
~/.cache/firebase/emulators/
.- Adicione esse caminho à configuração do cache de CI para evitar downloads repetidos.
Se você não tiver um arquivo
firebase.json
no seu repositório, adicione um argumento de linha de comando ao comandoemulators:start
ouemulators:exec
para especificar quais emuladores devem ser iniciados. Por exemplo,--only functions,firestore
.
Gerar um token de autenticação (somente emulador do Hosting)
Se os fluxos de trabalho de integração contínua dependerem do Firebase Hosting, você precisará fazer login usando um token para executar firebase emulators:exec
. Os outros emuladores não exigem login.
Para gerar um token, execute firebase login:ci
no ambiente local. Isso não deve ser realizado em um sistema de CI. Siga as instruções para fazer a autenticação. Você só precisa executar essa etapa uma vez por projeto, já que o token será válido entre os builds. O token deve ser tratado como uma senha. Mantenha-o em segredo.
Se o ambiente de CI permitir que você especifique variáveis de ambiente que podem ser usadas nos scripts de compilação, basta criar uma variável de ambiente chamada FIREBASE_TOKEN
, com o valor sendo a string do token de acesso. A CLI do Firebase selecionará automaticamente a variável de ambiente FIREBASE_TOKEN
, e os emuladores serão iniciados corretamente.
Como último recurso, você pode simplesmente incluir o token no script de compilação, mas certifique-se de que as partes não confiáveis não tenham acesso. Para essa abordagem codificada, adicione --token "YOUR_TOKEN_STRING_HERE"
ao comando firebase emulators:exec
.
Usar a API REST do emulador Hub
Listar emuladores em execução
Para listar os emuladores em execução no momento, envie uma solicitação GET
ao endpoint /emulators
do emulador Hub.
curl localhost:4400/emulators
O resultado será um objeto JSON listando todos os emuladores em execução e a configuração de host/porta deles, por exemplo:
{
"hub":{
"name": "hub",
"host": "localhost",
"port": 4400
},
"functions": {
"name": "functions",
"host": "localhost",
"port": 5001
}
"firestore": {
"name": "firestore",
"host": "localhost",
"port": 8080
}
}
Ativar / desativar acionadores de funções de segundo plano
Em algumas situações, será necessário desativar temporariamente os acionadores de funções locais.
Por exemplo, talvez você queira excluir todos os dados no emulador do Cloud Firestore sem acionar qualquer função onDelete
em execução no emulador do Cloud Functions.
Para desativar temporariamente os gatilhos de funções locais, envie uma solicitação PUT
ao endpoint /functions/disableBackgroundTriggers
do emulador Hub.
curl -X PUT localhost:4400/functions/disableBackgroundTriggers
O resultado será um objeto JSON detalhando o estado atual.
{
"enabled": false
}
Para ativar os acionadores de funções locais depois da desativação, envie uma solicitação PUT
para o endpoint /functions/enableBackgroundTriggers
do Hub do emulador.
curl -X PUT localhost:4400/functions/enableBackgroundTriggers
O resultado será um objeto JSON detalhando o estado atual.
{
"enabled": true
}
Integrações do SDK do emulador
As tabelas nesta seção indicam quais emuladores são compatíveis com SDKs de cliente e administrador. Futuro significa que a compatibilidade com o emulador está planejada, mas ainda não está disponível.
Disponibilidade do SDK do cliente
Android | Plataformas da Apple | Web |
IU do Firebase Android |
IU do Firebase iOS |
IU do Firebase 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 | Futuro |
Cloud Storage | 20.0.0 | 8.0.0 | 8.4.0 | N/A | N/A | 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 |
Disponibilidade do SDK Admin
Nó | 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 | 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 |