Firebase Local Emulator Suite se puede instalar y configurar para diferentes prototipos y entornos de prueba, 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 el paquete de emuladores:
- Instale la CLI de Firebase . Si aún no tiene Firebase CLI instalado, instálelo ahora . Necesitará la versión CLI 8.14.0 o superior para usar Emulator Suite. Puede verificar qué versión tiene 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 indicaciones en pantalla para especificar qué productos usar:
firebase init
- Configure la Suite del emulador. Este comando inicia un asistente de configuración que le permite seleccionar los emuladores de interés, descargar los archivos binarios del emulador correspondiente y configurar los puertos del emulador si los valores predeterminados no son apropiados.
firebase init emulators
Una vez que se instala 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 paquete de emuladores
Opcionalmente, puede configurar los puertos de red de los emuladores y la ruta a las definiciones de las 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 estas configuraciones, los emuladores escucharán en sus puertos predeterminados y los emuladores 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 es destructivo; aceptar los valores predeterminados conservará la configuración actual del emulador. |
Configuración de puertos
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 en 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 de base de fuego | 5000 |
publicación/suscripción | 8085 |
Configuración de ID de proyecto
Según cómo invoque los emuladores, puede ejecutar varias instancias de un emulador con diferentes ID de proyecto de Firebase o varias instancias de emulador para una ID de proyecto determinada. En tales casos, las instancias del emulador se ejecutan en un entorno separado.
Por lo general, 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 varios ID de proyecto en el entorno, aunque puede anular este comportamiento configurando la clave singleProjectMode
en false
en su firebase.json
.
Puede verificar la(s) declaración(es) de ID del proyecto en busca de discrepancias 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), usafirebase projects:list
. - Pruebas unitarias de reglas. El ID del proyecto a menudo se especifica en las llamadas a los métodos de la biblioteca de Pruebas unitarias de reglas
initializeTestEnvironment
oinitializeTestApp
. - La línea de comando
--project
del proyecto. Pasar la marca Firebase CLI--project
anula el proyecto predeterminado. Deberá asegurarse de que el valor de la marca coincida con el ID del proyecto en las pruebas unitarias y la inicialización de la aplicación.
Compruebe también las configuraciones de ID de proyecto específicas de la plataforma que ha establecido 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 base de database
, firestore
y 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 de JVM a través de la variable de entorno JAVA_TOOL_OPTIONS
.
Por ejemplo, si experimenta errores relacionados con el espacio de almacenamiento dinámico de Java, puede aumentar el tamaño máximo de almacenamiento dinámico de Java a 4 GB:
export JAVA_TOOL_OPTIONS="-Xmx4g"
firebase emulators:start
Se pueden especificar varios indicadores entre comillas separados 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 la CLI de Firebase, como la interfaz de usuario de Emulator Suite.
Poner en marcha emuladores
Puede iniciar los emuladores para que se ejecuten hasta que se terminen manualmente, o para que se ejecuten durante un script de prueba designado y luego se apaguen automáticamente.
Dominio | Descripción | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
emuladores: inicio | Inicie emuladores para los productos de Firebase configurados en firebase.json . Los procesos del emulador continuarán ejecutándose hasta que se detengan explícitamente. Llamar a emulators:start descargará los emuladores a ~/.cache/firebase/emulators/ si aún no están instalados.
| ||||||||||||
emuladores:exec scriptpath | Ejecute la secuencia de comandos en scriptpath después de iniciar los emuladores para los productos de Firebase configurados en firebase.json . Los procesos del emulador se detendrán automáticamente cuando el script haya terminado de ejecutarse.
|
El firebase emulators:exec
suele ser más adecuado para los 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 usarlos 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 de emulador de Cloud Firestore, Realtime Database o Cloud Storage para Firebase en ejecución. El Puede indicar a los emuladores que exporten datos automáticamente cuando se apaguen usando las |
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 típica de CI 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 su configuración de 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 al comandoemulators:start
oemulators:exec
para especificar qué emuladores deben iniciarse. Por ejemplo,
--only functions,firestore
.
Genere un token de autenticación (solo emulador de alojamiento)
Si sus flujos de trabajo de integración continua dependen de Firebase Hosting, deberá iniciar sesión con un token para ejecutar firebase emulators:exec
. Los otros emuladores no requieren inicio de sesión.
Para generar un token, ejecuta firebase login:ci
en tu entorno local; esto no debe realizarse desde un sistema CI. Siga las instrucciones para autenticarse. Solo debe 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 recogerá automáticamente la variable de entorno FIREBASE_TOKEN
y los emuladores se iniciarán correctamente.
Como último recurso, simplemente puede incluir el token en su script de compilación, pero asegúrese de que las partes que no sean de confianza no tengan acceso. Para este enfoque codificado, puede agregar --token "YOUR_TOKEN_STRING_HERE"
al firebase emulators:exec
.
Usar la API REST de Emulator Hub
Lista de emuladores en ejecución
Para obtener una lista de los emuladores que se están ejecutando actualmente, envíe una solicitud GET
al extremo /emulators
del Emulator Hub.
curl localhost:4400/emulators
El resultado será un objeto JSON que enumera 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
}
}
Habilitar/deshabilitar activadores de funciones en segundo plano
En algunas situaciones, deberá deshabilitar 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 extremo /functions/disableBackgroundTriggers
del 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 desencadenadores de funciones locales después de que se hayan deshabilitado, envíe una solicitud PUT
al extremo /functions/enableBackgroundTriggers
del 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 administrador y de cliente. Futuro significa que la compatibilidad con el emulador está planificada 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 en 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 administración
Nodo | Java | Pitón | Vamos | |
---|---|---|---|---|
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 en 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 |