Firebase Local Emulator Suite se puede instalar y configurar para diferentes entornos de prototipos y pruebas, desde sesiones únicas de creación de prototipos hasta flujos de trabajo de integración continua a escala de producción.
Instale el conjunto de emuladores locales
Antes de instalar Emulator Suite necesitará:
Para instalar Emulator Suite:
- Instale Firebase CLI . Si aún no tienes Firebase CLI instalado, instálalo ahora . Necesitará la versión CLI 8.14.0 o superior para utilizar Emulator Suite. Puedes comprobar qué versión tienes instalada usando el siguiente comando:
firebase --version
- Si aún no lo ha hecho, inicialice el directorio de trabajo actual como un proyecto de Firebase, siguiendo las instrucciones en pantalla para especificar qué productos usar:
firebase init
- Configure Emulator Suite. Este comando inicia un asistente de configuración que le permite seleccionar emuladores de interés, descargar los archivos binarios del emulador correspondientes y configurar los puertos del emulador si los valores predeterminados no son apropiados.
firebase init emulators
Una vez instalado un emulador, no se realizan comprobaciones de actualización y no se realizarán descargas automáticas adicionales hasta que actualice su versión de Firebase CLI.
Configurar el conjunto de emuladores
Opcionalmente, puedes configurar los puertos de red de los emuladores y la ruta a las definiciones de reglas de seguridad en el archivo firebase.json
:
- Cambie los puertos del emulador ejecutando
firebase init emulators
o editandofirebase.json
manualmente. - Cambie la ruta a las definiciones de las reglas de seguridad editando
firebase.json
manualmente.
Si no configura estos ajustes, los emuladores escucharán en sus puertos predeterminados y los emuladores de Cloud Firestore, Realtime Database y Cloud Storage para Firebase se ejecutarán con seguridad de datos abierta.
Dominio | Descripción |
---|---|
emuladores de inicio | Inicie un asistente de inicialización del emulador. Identifique los emuladores que se instalarán y, opcionalmente, especifique la configuración del puerto del emulador. init emulators no son destructivos; aceptar los valores predeterminados preservará la configuración actual del emulador. |
Configuración de puerto
Cada emulador se vincula a un puerto diferente en su máquina con un valor predeterminado preferido.
Emulador | Puerto predeterminado |
---|---|
Autenticación | 9099 |
Interfaz de usuario del conjunto de emuladores | 4000 |
Funciones de la nube | 5001 |
Eventarc | 9299 |
Base de datos en tiempo real | 9000 |
Tienda de fuego en la nube | 8080 |
Almacenamiento en la nube para Firebase | 9199 |
Alojamiento base de fuego | 5000 |
Pub/Sub | 8085 |
Configuración de ID de proyecto
Dependiendo de cómo invoques los emuladores, puedes ejecutar varias instancias de un emulador usando diferentes ID de proyecto de Firebase o varias instancias de emulador para un ID de proyecto determinado. En tales casos, las instancias del emulador se ejecutan en un entorno independiente.
Generalmente es una buena práctica establecer un ID de proyecto para todas las invocaciones del emulador, de modo que la interfaz de usuario de Emulator Suite, los diferentes emuladores de productos y todas las instancias en ejecución de un emulador en particular puedan comunicarse correctamente en todos los casos.
Local Emulator Suite emite advertencias cuando detecta múltiples ID de proyecto en el entorno, aunque puedes anular este comportamiento estableciendo la clave singleProjectMode
en false
en tu firebase.json
.
Puede comprobar si las declaraciones de ID del proyecto no coinciden en:
- El proyecto predeterminado en la línea de comando. De forma predeterminada, el ID del proyecto se tomará al inicio del proyecto seleccionado con
firebase init
ofirebase use
. Para ver la lista de proyectos (y ver cuál está seleccionado), usefirebase projects:list
. - Pruebas unitarias de reglas. El ID del proyecto a menudo se especifica en llamadas a los métodos de la biblioteca de pruebas unitarias de reglas
initializeTestEnvironment
oinitializeTestApp
. - La línea de comando
--project
bandera. Al pasar el indicador--project
de Firebase CLI se anula el proyecto predeterminado. Deberá asegurarse de que el valor de la bandera coincida con el ID del proyecto en las pruebas unitarias y en la inicialización de la aplicación.
También verifique las configuraciones de ID de proyecto específicas de la plataforma que estableció al configurar sus plataformas Apple , Android y proyectos web .
Configuración de reglas de seguridad
Los emuladores tomarán la configuración de las reglas de seguridad de la database
, firestore
y las claves de configuración de storage
en 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"
}
}
}
Especificación de opciones de Java
El emulador de Realtime Database, el emulador de Cloud Firestore y parte del emulador de Cloud Storage para Firebase se basan en Java, que se puede personalizar con indicadores JVM a través de la variable de entorno JAVA_TOOL_OPTIONS
.
Por ejemplo, si experimenta errores relacionados con el espacio del montón de Java, puede aumentar el tamaño máximo del montón de Java a 4 GB:
export JAVA_TOOL_OPTIONS="-Xmx4g"
firebase emulators:start
Se pueden especificar varios indicadores entre comillas separadas por espacios, como JAVA_TOOL_OPTIONS="-Xms2g -Xmx4g"
. Las marcas solo afectan a los componentes basados en Java de los emuladores y no tienen ningún efecto en otras partes de Firebase CLI, como la interfaz de usuario de Emulator Suite.
Iniciar emuladores
Puede iniciar los emuladores para que se ejecuten hasta que se finalicen manualmente, o para que se ejecuten durante un script de prueba designado y luego se apaguen automáticamente.
Dominio | Descripción | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
emuladores: inicio | Inicie los emuladores para los productos Firebase configurados en firebase.json . Los procesos del emulador continuarán ejecutándose hasta que se detengan explícitamente. Llamar emulators:start descargará los emuladores a ~/.cache/firebase/emulators/ si aún no están instalados.
| ||||||||||||
emuladores: ruta scriptpath | Ejecute el script en scriptpath después de iniciar los emuladores para los productos Firebase configurados en firebase.json . Los procesos del emulador se detendrán automáticamente cuando el script haya terminado de ejecutarse.
|
El método firebase emulators:exec
generalmente es más apropiado para flujos de trabajo de integración continua.
Exportar e importar datos del emulador
Puede exportar datos de los emuladores de autenticación, Cloud Firestore, Realtime Database y Cloud Storage para Firebase para utilizarlos como un conjunto de datos de referencia común y compartible. Estos conjuntos de datos se pueden importar usando el indicador --import
, como se describe anteriormente.
emuladores: exportar export_directory | Autenticación, Cloud Firestore, Realtime Database o Cloud Storage para el emulador de Firebase . Exporte datos desde una instancia en ejecución del emulador de Cloud Firestore, Realtime Database o Cloud Storage para Firebase. El Puede indicar a los emuladores que exporten datos automáticamente cuando se apaguen utilizando los indicadores |
Integre con su sistema CI
Ejecución de imágenes de Emulator Suite en contenedores
La instalación y configuración de Emulator Suite con contenedores en una configuración de CI típica es sencilla.
Hay algunas cuestiones a tener en cuenta:
Los archivos JAR se instalan y almacenan en caché en
~/.cache/firebase/emulators/
.- Es posible que desee agregar esta ruta a la configuración de su caché de CI para evitar descargas repetidas.
Si no tiene un archivo
firebase.json
en su repositorio, debe agregar un argumento de línea de comando alemulators:start
oemulators:exec
para especificar qué emuladores se deben iniciar. Por ejemplo,
--only functions,firestore
.
Generar un token de autenticación (solo emulador de hosting)
Si sus flujos de trabajo de integración continua dependen de Firebase Hosting, deberá iniciar sesión con un token para poder ejecutar firebase emulators:exec
. Los otros emuladores no requieren iniciar sesión.
Para generar un token, ejecute firebase login:ci
en su entorno local; Esto no debe realizarse desde un sistema CI. Siga las instrucciones para autenticarse. Solo deberías necesitar realizar este paso una vez por proyecto, ya que el token será válido en todas las compilaciones. El token debe tratarse como una contraseña; asegúrese de que se mantenga en secreto.
Si su entorno de CI le permite especificar variables de entorno que se pueden usar en los scripts de compilación, simplemente cree una variable de entorno llamada FIREBASE_TOKEN
, cuyo valor sea la cadena del token de acceso. Firebase CLI seleccionará automáticamente la variable de entorno FIREBASE_TOKEN
y los emuladores se iniciarán correctamente.
Como último recurso, puede simplemente incluir el token en su script de compilación, pero asegúrese de que las partes que no son de confianza no tengan acceso. Para este enfoque codificado, puede agregar --token "YOUR_TOKEN_STRING_HERE"
al comando firebase emulators:exec
.
Utilice la API REST de Emulator Hub
Lista de emuladores en ejecución
Para enumerar los emuladores actualmente en ejecución, envíe una solicitud GET
al punto final /emulators
de Emulator Hub.
curl localhost:4400/emulators
El resultado será un objeto JSON que enumerará todos los emuladores en ejecución y su configuración de host/puerto, por ejemplo:
{
"hub":{
"name": "hub",
"host": "localhost",
"port": 4400
},
"functions": {
"name": "functions",
"host": "localhost",
"port": 5001
}
"firestore": {
"name": "firestore",
"host": "localhost",
"port": 8080
}
}
Activar/desactivar activadores de funciones en segundo plano
En algunas situaciones, deberá desactivar temporalmente la función local y los activadores de extensión. Por ejemplo, es posible que desee eliminar todos los datos en el emulador de Cloud Firestore sin activar ninguna función onDelete
que se esté ejecutando en los emuladores de Cloud Functions o Extensions.
Para deshabilitar temporalmente los activadores de funciones locales, envíe una solicitud PUT
al punto final /functions/disableBackgroundTriggers
de Emulator Hub.
curl -X PUT localhost:4400/functions/disableBackgroundTriggers
El resultado será un objeto JSON que detalla el estado actual.
{
"enabled": false
}
Para habilitar los activadores de funciones locales después de haberlos deshabilitado, envíe una solicitud PUT
al punto final /functions/enableBackgroundTriggers
de Emulator Hub.
curl -X PUT localhost:4400/functions/enableBackgroundTriggers
El resultado será un objeto JSON que detalla el estado actual.
{
"enabled": true
}
Integraciones del SDK del emulador
Las tablas de esta sección indican qué emuladores son compatibles con los SDK de cliente y de administrador. En el futuro , se planea el soporte del emulador, pero aún no está disponible.
Disponibilidad del SDK del cliente
Androide | plataformas de manzana | Web | Interfaz de usuario de base de fuego Androide | Interfaz de usuario de base de fuego iOS | Interfaz de usuario de base de fuego Web | |
---|---|---|---|---|---|---|
Base de datos en tiempo real | 19.4.0 | 7.2.0 | 8.0.0 | 6.4.0 | Futuro | N / A |
Tienda de fuego en la nube | 21.6.0 | 7.2.0 | 8.0.0 | 6.4.0 | Futuro | N / A |
Autenticación | 20.0.0 | 7.0.0 | 8.0.0 | 7.0.0 | Futuro | 4.7.2 |
Almacenamiento en la nube para Firebase | 20.0.0 | 8.0.0 | 8.4.0 | 7.0.0 | 11.0.0 | N / A |
Funciones de la nube | 19.1.0 | 7.2.0 | 8.0.0 | N / A | N / A | N / A |
Alojamiento | N / A | N / A | N / A | N / A | N / A | N / A |
Extensiones | N / A | N / A | N / A | N / A | N / A | N / A |
Disponibilidad del SDK de administrador
Nodo | Java | Pitón | Ir | |
---|---|---|---|---|
Base de datos en tiempo real | 8.6.0 | 6.10.0 | 2.18.0 | Futuro |
Tienda de fuego en la nube | 8.0.0 | 6.10.0 | 3.0.0 | 1.0.0 |
Autenticación | 9.3.0 | 7.2.0 | 5.0.0 | 4.2.0 |
Almacenamiento en la nube para Firebase | 9.8.0 | Futuro | Futuro | Futuro |
Funciones de la nube | N / A | N / A | N / A | N / A |
Alojamiento | N / A | N / A | N / A | N / A |
Extensiones | N / A | N / A | N / A | N / A |