Instale, configure e integre o Local Emulator Suite

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:

  • Versão 16.0 ou superior do Node.js.
  • Versão 11 ou superior do JDK Java.

Para instalar o Emulator Suite:

  1. 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
  2. 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
  3. 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 emulators ou editando firebase.json manualmente.
  • Altere o caminho para as definições das regras de segurança editando-o firebase.json manualmente.

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 init ou firebase use. Para ver a lista de projetos (e ver qual está selecionado) use firebase 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 initializeTestEnvironment ou initializeTestApp.
  • A marca --project da linha de comandos. A transmissão da flag Firebase CLI --project substitui 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.
Denunciar Descrição
--only Opcional. Limitar os emuladores que são iniciados. Forneça uma lista de nomes de emuladores separados por vírgulas, especificando um ou mais de "auth", "database", "firestore", "functions", "hosting" ou "pubsub".
--inspect-functions debug_port Opcional. Use com o emulador Cloud Functions para ativar a depuração de pontos de interrupção de funções na porta especificada (ou na porta predefinida 9229 se o argumento for omitido). Tenha em atenção que, quando esta flag é fornecida, o emulador muda para um modo de execução serializado especial no qual as funções são executadas num único processo, por ordem sequencial (FIFO). Isto simplifica a depuração de funções, embora o comportamento difira da execução paralela de funções em vários processos na nuvem.Cloud Functions
--export-on-exit= Opcional. Use com o emulador Authentication, Cloud Firestore, Realtime Database ou Cloud Storage for Firebase. Indique aos emuladores que exportem dados para um diretório quando ocorrer o encerramento, conforme descrito para o comando emulators:export. Pode especificar o diretório de exportação com esta flag: firebase emulators:start --export-on-exit=./saved-data. Se for usado --import, o caminho de exportação é predefinido para o mesmo; por exemplo: firebase emulators:start --import=./data-path --export-on-exit. Por último, se quiser, transmita caminhos de diretórios diferentes para os flags --import e --export-on-exit.
--import=import_directory Opcional. Use com o emulador Authentication, Cloud Firestore, Realtime Database ou Cloud Storage for Firebase. Importe dados guardados com a --export-on-exit opção de arranque ou o comando emulators:export para uma instância do emulador Authentication, Cloud Firestore, Realtime Database ou Cloud Storage for Firebase em execução. Todos os dados atualmente na memória do emulador vão ser substituídos.
--log-verbosity=verbosity Opcional. Reduz a quantidade de saída de registo dos emuladores para reduzir o ruído na consola e nos ficheiros de registo. Os valores válidos são DEBUG, INFO, QUIET e SILENT.
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.
Denunciar Descrição
--only Opcional. Limitar os emuladores que são iniciados. Forneça uma lista de nomes de emuladores separados por vírgulas, especificando um ou mais de "firestore", "database", "functions", "hosting" ou "pubsub".
--inspect-functions debug_port Opcional. Use com o emulador Cloud Functions para ativar a depuração de pontos de interrupção de funções na porta especificada (ou na porta predefinida 9229 se o argumento for omitido). Tenha em atenção que, quando esta flag é fornecida, o emulador muda para um modo de execução especial serializado no qual as funções são executadas num único processo, por ordem sequencial (FIFO). Isto simplifica a depuração de funções, embora o comportamento difira da execução paralela de funções em vários processos na nuvem.Cloud Functions
--export-on-exit= Opcional. Use com o emulador Authentication, Cloud Firestore, Realtime Database ou Cloud Storage for Firebase. Indique aos emuladores que exportem dados para um diretório quando ocorrer o encerramento, conforme descrito para o comando emulators:export. Pode especificar o diretório de exportação com esta flag: firebase emulators:start --export-on-exit=./saved-data. Se for usado --import, o caminho de exportação é predefinido para o mesmo; por exemplo: firebase emulators:start --import=./data-path --export-on-exit. Por último, se quiser, transmita diferentes caminhos de diretório para os flags --import e --export-on-exit.
--import=import_directory Opcional. Use com o emulador Authentication, Cloud Firestore, Realtime Database ou Cloud Storage for Firebase. Importe dados guardados com a --export-on-exit opção de arranque ou o comando emulators:export para uma instância do emulador Authentication, Cloud Firestore, Realtime Database ou Cloud Storage for Firebase em execução. Todos os dados atualmente na memória do emulador vão ser substituídos.
--ui Opcional. Executar a IU do emulador durante a execução.
--log-verbosity=verbosity Opcional. Reduz a quantidade de saída de registo dos emuladores para reduzir o ruído na consola e nos ficheiros de registo. Os valores válidos são DEBUG, INFO, QUIET e SILENT.

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 export_directory especificado é criado se ainda não existir. Se o diretório especificado existir, é-lhe pedido que confirme que os dados de exportação anteriores devem ser substituídos. Pode ignorar este pedido com a sinalização --force. O diretório de exportação contém um ficheiro de manifesto de dados, firebase-export-metadata.json.

Pode dar instruções aos emuladores para exportarem dados automaticamente quando são encerrados através das flags --export-on-exit descritas acima.

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.json no seu repositório, tem de adicionar um argumento de linha de comandos ao comando emulators:start ou emulators:exec para 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/emulators

O 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/disableBackgroundTriggers

O 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/enableBackgroundTriggers

O 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