Este post tiene como origen divertidos problemas que hemos tenido. Recomendamos solo habilitar los Emuladores necesarios. Hemos tenido algunos líos, en especial con el Emulador Pub/Sub.
Para comenzar, es necesario tener instalado Node.js 10.13 o mayor y verificar que se tiene la última versión de firebase-tools con el siguiente comando:
npm install -g firebase-tools
Asumiendo que firebase ya está corriendo y funcionando, entonces lo siguiente es inicializar el emulador:
$ firebase init emulators ######## #### ######## ######## ######## ### ###### ######## ## ## ## ## ## ## ## ## ## ## ## ###### ## ######## ###### ######## ######### ###### ###### ## ## ## ## ## ## ## ## ## ## ## ## #### ## ## ######## ######## ## ## ###### ######## You're about to initialize a Firebase project in this directory: D:\angular\magenta Before we get started, keep in mind: * You are initializing in an existing Firebase project directory ? Are you ready to proceed? Yes === Project Setup First, let's associate this project directory with a Firebase project. You can create multiple project aliases by running firebase use --add, but for now we'll just set up a default project. i .firebaserc already has a default project, using magenta-dev-46fe2. === Emulators Setup ? Which Firebase emulators do you want to set up? Press Space to select emulators, then Enter to confirm your choices. Authentication Emulator, Functions Emulator, Firestore Emulator, Hosting Emulator, Pub/Sub Emulator ? Which port do you want to use for the auth emulator? 9099 i Port for functions already configured: 5001 i Port for firestore already configured: 8080 i Port for hosting already configured: 5000 ? Which port do you want to use for the pubsub emulator? 8085 i Emulator UI already enabled with port: (automatic) ? Would you like to download the emulators now? Yes i pubsub: downloading pubsub-emulator-0.1.0.zip... Progress: ===================================================================================================================================> (100% of 37MB) i Writing configuration info to firebase.json... i Writing project information to .firebaserc... + Firebase initialization complete!
Nótese que esta parte es interactiva y será necesario seleccionar los emuladores que se quieren utilizar y seleccionar los puertos. Una vez hecho esto
Cómo iniciar el Emulador de Firebase
Los siguientes comandos le permitirán iniciar el emulador:
firebase emulators:start
Para guardar los datos que se creen al terminar el emulador, utilizar:
firebase emulators:start --export-on-exit=emulator-data
Para cargar los datos guardados al iniciar el emulador, utilizar:
firebase emulators:start --import=emulator-data
Para cargar los datos al iniciar y guardar al terminar:
firebase emulators:start --import=emulator-data --export-on-exit=emulator-data
Cómo detener el depurador
El depurador se detiene con el clásico Ctrl + C, pero esto a veces deja bloqueado un puerto, generalmente el 8080, lo que luego no permite reinicar el depurador. Para resolverlo se puede instalar el paquete kill-port:
npm install --global kill-port
Con esto se podrá liberar el puerto con el siguiente comando:
kill-port 8080
Cómo depurar paso a paso con Visual Studio Code
Para esto es necesario configurar el archivo .vscode/launch.json y agregar la configuración para depurar así:
{ "version": "0.2.0", "configurations": [ { ... }, { "type": "node", "request": "attach", "name": "Debug Functions", "port": 9229 } ] }
Con esto, ya es posible ejecutar el Emulador para que permita depuración paso a paso y agregar puntos de interrupción:
firebase emulators:start --inspect-functions
Agregando las banderas para que se importen y exporten los datos, la cosa quedaría como así:
firebase emulators:start --import=emulator-data --export-on-exit=emulator-data --inspect-functions
La Ñapa
Es posible configurar el proyecto que el comando npm run cbuild refresque todo el código generado en /lib. Para esto instalar rimraf:
npm install -D rimraf
Luego ajustar el archivo package.json, agregando el script cbuild:
{ "name": "functions", "scripts": { "lint": "tslint --project tsconfig.json", "build": "tsc", "cbuild": "rimraf lib/ && tsc", "serve": "npm run build && firebase serve --only ... }, ... }
Hecho esto, se podrá correr el comando:
npm run cbuild
Que limpiará cualquier código existente en el folder lib y hara el build nuevamente, así el emulador funcionará con los últimos cambios.
La documentación oficial del Emulador de Firebase está disponible aquí: https://firebase.google.com/docs/emulator-suite?hl=es