O Firebase Local Emulator Suite pode ser instalado e configurado para diferentes protótipos e ambientes de teste, desde sessões únicas de prototipagem até fluxos de trabalho de integração contínua em escala de produção.
Instale o pacote do emulador local
Antes de instalar o Emulator Suite, você precisará de:
Para instalar o pacote do emulador:
- Instale a CLI do Firebase . Se você ainda não tem o Firebase CLI instalado, instale-o agora . Você precisará da CLI versão 8.14.0 ou superior para usar o Emulator Suite. Você pode verificar qual versão você instalou usando o 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 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 os emuladores de interesse, baixar os arquivos binários do emulador correspondente e definir as portas do emulador se os padrões não forem apropriados.
firebase init emulators
Depois que um emulador é instalado, nenhuma verificação de atualização é realizada e nenhum download automático adicional ocorrerá até que você atualize sua versão do Firebase CLI.
Configurar pacote do emulador
Opcionalmente, você pode configurar as portas de rede dos emuladores e o caminho para as definições das 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 escutarão em suas portas padrão e os emuladores Cloud Firestore, Realtime Database e Cloud Storage for Firebase serão executados com segurança de dados aberta.
Comando | Descrição |
---|---|
emuladores de inicialização | 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 são destrutivos; aceitar os padrões preservará a configuração atual do emulador. |
Configuração da porta
Cada emulador se liga a uma porta diferente em sua máquina com um valor padrão preferencial.
emulador | Porta padrão |
---|---|
Autenticação | 9099 |
IU do pacote do emulador | 4000 |
Funções da nuvem | 5001 |
Eventarc | 9299 |
banco de dados em tempo real | 9000 |
Cloud Firestore | 8080 |
Armazenamento em nuvem para Firebase | 9199 |
Hospedagem Firebase | 5000 |
Pub/Sub | 8085 |
Configuração do código do projeto
Dependendo de como você invoca emuladores, você pode executar várias instâncias de um emulador usando diferentes IDs de projeto do Firebase ou várias instâncias de emulador para um determinado ID de projeto. Nesses casos, as instâncias do emulador são executadas em um ambiente separado.
Geralmente, é uma boa prática definir um ID de projeto para todas as invocações do emulador, para que a interface do usuário do pacote do emulador, diferentes emuladores de produtos e todas as instâncias em execução de um emulador específico possam se comunicar corretamente em todos os casos.
O Local Emulator Suite emite avisos quando detecta vários IDs de projeto no ambiente, embora você possa substituir esse comportamento definindo a chave singleProjectMode
como false
em seu firebase.json
.
Você pode verificar as declarações de ID do projeto quanto a incompatibilidades em:
- O projeto padrão na linha de comando. Por padrão, o ID do projeto será obtido na inicialização do projeto selecionado com
firebase init
oufirebase use
. Para visualizar a lista de projetos (e ver qual deles está selecionado), usefirebase projects:list
. - Regras de testes de unidade. O ID do projeto geralmente é especificado em chamadas para os métodos da biblioteca Rules Unit Testing
initializeTestEnvironment
ouinitializeTestApp
. - A linha de comando
--project
sinalizador. Passar o sinalizador Firebase CLI--project
substitui o projeto padrão. Você precisará garantir que o valor do sinalizador corresponda ao ID do projeto nos testes de unidade e na inicialização do aplicativo.
Verifique também as configurações de ID de projeto específicas da plataforma que você definiu ao configurar suas plataformas Apple , Android e projetos da web .
Configuração das regras de segurança
Os emuladores terão a configuração das regras de segurança do database
de dados, firestore
e chaves de configuração 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"
}
}
}
Especificando opções Java
O emulador Realtime Database, o emulador Cloud Firestore e parte do emulador Cloud Storage para Firebase são baseados em Java, que podem ser personalizados com sinalizadores JVM por meio da variável de ambiente JAVA_TOOL_OPTIONS
.
Por exemplo, se você tiver erros relacionados ao espaço de heap Java, poderá aumentar o tamanho máximo do heap Java para 4 GB:
export JAVA_TOOL_OPTIONS="-Xmx4g"
firebase emulators:start
Vários sinalizadores podem ser especificados entre aspas separados por espaços, como JAVA_TOOL_OPTIONS="-Xms2g -Xmx4g"
. As sinalizações afetam apenas os componentes baseados em Java dos emuladores e não afetam outras partes da Firebase CLI, como a interface do usuário do pacote do emulador.
Iniciar emuladores
Você pode iniciar os emuladores para serem executados até serem encerrados manualmente ou para serem executados durante um script de teste designado e, em seguida, encerrados automaticamente.
Comando | Descrição | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
emuladores:iniciar | Inicie emuladores para os produtos Firebase configurados em firebase.json . Os processos do emulador continuarão em execução até serem interrompidos explicitamente. Chamar emulators:start fará o download dos emuladores para ~/.cache/firebase/emulators/ se ainda não estiverem instalados.
| ||||||||||||
emuladores:exec scriptpath | Execute o script em scriptpath após iniciar os emuladores dos produtos Firebase configurados em firebase.json . Os processos do emulador serão interrompidos automaticamente quando o script terminar de ser executado.
|
O método firebase emulators:exec
geralmente é mais apropriado para fluxos de trabalho de integração contínua.
Exportar e importar dados do emulador
Você pode exportar dados dos emuladores Authentication, Cloud Firestore, Realtime Database e Cloud Storage for Firebase para usar como um conjunto de dados de linha de base comum e compartilhável. Esses conjuntos de dados podem ser importados usando o sinalizador --import
, conforme descrito acima.
emuladores:export export_directory | Autenticação, Cloud Firestore, Realtime Database ou Cloud Storage para emulador Firebase . Exporte dados de uma instância de emulador Cloud Firestore, Realtime Database ou Cloud Storage para Firebase em execução. O Você pode instruir os emuladores a exportar dados automaticamente quando eles desligarem usando os |
Integre com seu sistema de CI
Executando imagens do Emulator Suite conteinerizadas
A instalação e configuração do Emulator Suite com contêineres em uma configuração típica de CI é direta.
Há algumas questões a serem observadas:
Os arquivos JAR são instalados e armazenados em cache em
~/.cache/firebase/emulators/
.- Você pode querer adicionar esse caminho à sua configuração de cache de CI para evitar downloads repetidos.
Se você não tiver um arquivo
firebase.json
em seu repositório, deverá adicionar um argumento de linha de comando ao comandoemulators:start
ouemulators:exec
para especificar quais emuladores devem ser iniciados. Por exemplo,
--only functions,firestore
.
Gere um token de autenticação (somente emulador de hospedagem)
Se seus fluxos de trabalho de integração contínua dependem do Firebase Hosting , você precisará fazer login usando um token para executar firebase emulators:exec
. Os outros emuladores não requerem login.
Para gerar um token, execute firebase login:ci
em seu ambiente local; isso não deve ser executado a partir de um sistema CI. Siga as instruções para autenticar. Você só precisa executar esta etapa uma vez por projeto, pois o token será válido entre as compilações. O token deve ser tratado como uma senha; certifique-se de que seja mantido em segredo.
Se seu ambiente de CI permite especificar variáveis de ambiente que podem ser usadas nos scripts de construção, basta criar uma variável de ambiente chamada FIREBASE_TOKEN
, com o valor sendo a string do token de acesso. A Firebase CLI 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 em seu script de construção, mas certifique-se de que partes não confiáveis não tenham acesso. Para essa abordagem codificada, você pode adicionar --token "YOUR_TOKEN_STRING_HERE"
ao comando firebase firebase emulators:exec
.
Use a API REST do hub do emulador
Listar emuladores em execução
Para listar os emuladores em execução no momento, envie uma solicitação GET
para o ponto de extremidade /emulators
do hub do emulador.
curl localhost:4400/emulators
O resultado será um objeto JSON listando todos os emuladores em execução e sua configuração de host/porta, 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, você precisará desativar temporariamente a função local e os acionadores de extensão. Por exemplo, você pode querer excluir todos os dados no emulador Cloud Firestore sem acionar nenhuma função onDelete
que esteja em execução nos emuladores Cloud Functions ou Extensions.
Para desativar temporariamente os gatilhos de função local, envie uma solicitação PUT
para o ponto de extremidade /functions/disableBackgroundTriggers
do hub do emulador.
curl -X PUT localhost:4400/functions/disableBackgroundTriggers
O resultado será um objeto JSON detalhando o estado atual.
{
"enabled": false
}
Para habilitar os gatilhos de função local após terem sido desabilitados, envie uma solicitação PUT
para o ponto de extremidade /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 Admin. Futuro significa que o suporte ao emulador está planejado, mas ainda não está disponível.
Disponibilidade do SDK do cliente
Android | Plataformas da Apple | Rede | IU do Firebase Android | IU do Firebase iOS | IU do Firebase Rede | |
---|---|---|---|---|---|---|
banco de dados em tempo real | 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 |
Autenticação | 20.0.0 | 7.0.0 | 8.0.0 | 7.0.0 | Futuro | 4.7.2 |
Armazenamento em nuvem para Firebase | 20.0.0 | 8.0.0 | 8.4.0 | 7.0.0 | 11.0.0 | N / D |
Funções da nuvem | 19.1.0 | 7.2.0 | 8.0.0 | N / D | N / D | N / D |
Hospedagem | N / D | N / D | N / D | N / D | N / D | N / D |
Extensões | N / D | N / D | N / D | N / D | N / D | N / D |
Disponibilidade do Admin SDK
Nó | Java | Pitão | Vai | |
---|---|---|---|---|
banco de dados em tempo real | 8.6.0 | 6.10.0 | 2.18.0 | Futuro |
Cloud Firestore | 8.0.0 | 6.10.0 | 3.0.0 | 1.0.0 |
Autenticação | 9.3.0 | 7.2.0 | 5.0.0 | 4.2.0 |
Armazenamento em nuvem para Firebase | 9.8.0 | Futuro | Futuro | Futuro |
Funções da nuvem | N / D | N / D | N / D | N / D |
Hospedagem | N / D | N / D | N / D | N / D |
Extensões | N / D | N / D | N / D | N / D |