test serve functions example deploy node.js function firebase google-cloud-functions firebase-cloud-functions

node.js - serve - firebase-functions-test



cómo probar Cloud Functions para Firebase localmente en la PC (6)

Hoy Firebase lanzó su nuevo producto Cloud Functions for Firebase y acabo de crear una función de hello world y desplegarla en mi proyecto existente de firebase.

Parece que agrupa todas las dependencias y lo carga a firebase como lo hace la función aws lambda . Pero lleva mucho tiempo hacerlo incluso con cambios menores en el código y también necesita una buena conectividad de internet. Si está fuera de línea por alguna razón, está a oscuras sobre el código que está escribiendo hasta que tenga una forma de ejecutar y probar esas funciones sin conexión en su máquina local.

¿Hay alguna manera de probar Cloud Functions para Firebase localmente?


Ejecutar funciones localmente

firebase.google.com/docs/functions/local-emulator

Para usar esta función, las herramientas de firebase deben tener una versión mínima 3.8.0, y SDK de firebase-functions debe tener una versión mínima de 0.5.7. Para actualizar ambos, ejecute los siguientes comandos en el directorio funciones / para su proyecto:

npm install --save firebase-functions npm install -g firebase-tools

Para ejecutar funciones localmente, use el servicio firebase:

firebase serve --only functions # to only emulate functions

Precaución: Característica experimental. Esta es una función experimental que actualmente solo admite la emulación de funciones HTTPS.

ACTUALIZAR:

Hey Functions Trusted Testers,

Acabamos de lanzar firebase-tools v3.11.0, que admite un shell interactivo para emular todo tipo de funciones e invocarlas con datos de prueba. Gracias a muchos de ustedes por participar en las sesiones de comentarios sobre esta función.

¡Consulte nuestra documentación sobre cómo utilizar esta nueva y emocionante función!

https://firebase.google.com/docs/functions/local-emulator#use_the_cloud_functions_shell


Ahora hay un emulador de funciones en la nube que le permite llamar funciones localmente

Una vez que haya completado mi PoC, actualizaré esta respuesta para incluir el código y los pasos que utilicé.


En primer lugar, te sugiero que instales las siguientes dependencias,

npm install --save firebase-functions npm install -g firebase-tools

Si ya está instalado, puede actualizarlo a la última. En general, funciones-emulator viene con la dependencia anterior, pero aún así te recomendaría que lo actualices,

npm install -g @google-cloud/functions-emulator

Una vez que se haya actualizado, vaya a la carpeta de funciones de su aplicación y ejecute el siguiente comando:

firebase serve --only functions

¡Espero que ayude!


Respondido aquí: https://github.com/firebase/firebase-functions/issues/4#issuecomment-286515989

Google Cloud Functions también tiene un emulador local de código abierto y estamos trabajando para crear una integración más estrecha con Cloud Functions for Firebase. Mientras tanto, puedes consultarlo aquí: https://github.com/GoogleCloudPlatform/cloud-functions-emulator/

El emulador te permite ejecutar funciones localmente. Aquí está la documentación que explica cómo usarlo: https://cloud.google.com/functions/docs/emulator


firebaser aquí

Aún no. Hay un emulator funciones en la nube, pero actualmente no es compatible con las funciones escritas mediante el SDK de Firebase. El soporte del emulador local está en la parte superior de nuestra lista y tendremos algo pronto.


firebaser aquí

El despliegue de sus Funciones, de hecho, toma más tiempo de lo que normalmente estoy dispuesto a esperar. Estamos trabajando duro para mejorar eso y (como dijo Brendan) estamos trabajando en un emulador local.

Pero por el momento, la mayoría de las veces escribo mi lógica comercial real en un guión de nodo por separado. De esa manera puedo probarlo desde un indicador de comando local con el node speech.js . Una vez que estoy satisfecho de que la función funciona, la copio / pego en mi archivo de Funciones real o (mejor) importo el módulo de speech en mi archivo de funciones y lo invoco desde allí.

Un ejemplo abreviado que desenterré rápidamente es cuando estaba conectando la extracción de texto con la API de Cloud Vision. Tengo un archivo llamado ocr.js que contiene:

var fetch = require(''node-fetch''); function extract_text(url, gcloud_authorization) { console.log(''extract_text from image ''+url+'' with authorization ''+gcloud_authorization); return fetch(url).then(function(res) { return res.buffer(); }).then(function(buffer) { return fetch(''https://vision.googleapis.com/v1/images:annotate?key=''+gcloud_authorization, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ "requests":[ { "image":{ "content": buffer.toString(''base64'') }, "features":[ { "type":"TEXT_DETECTION", "maxResults":1 } ] } ] }) }); }).then(function(res) { var json = res.json(); if (res.status >= 200 && res.status < 300) { return json; } else { return json.then(Promise.reject.bind(Promise)); } }).then(function(json) { if (json.responses && json.responses.length && json.responses[0].error) { return Promise.reject(json.responses[0].error); } return json.responses[0].textAnnotations[0].description; }); } if (process.argv.length > 2) { // by passing the image URL and gcloud access token, you can test this module process.argv.forEach(a => console.log(a)); extract_text( process.argv[2], // image URL process.argv[3] // gcloud access token or API key ).then(function(description) { console.log(description); }).catch(function(error) { console.error(error); }); } exports.extract_text = extract_text;

Y luego en mis funciones index.js, tengo:

var functions = require(''firebase-functions''); var fetch = require(''node-fetch''); var ocr = require(''./ocr.js''); exports.ocr = functions.database().path(''/messages/{room}/{id}'').onWrite(function(event) { console.log(''OCR triggered for /messages/''+event.params.room+''/''+event.params.id); if (!event.data || !event.data.exists()) return; if (event.data.ocr) return; if (event.data.val().text.indexOf("https://firebasestorage.googleapis.com/") !== 0) return; // only OCR images console.log(JSON.stringify(functions.env)); return ocr.extract_text(event.data.val().text, functions.env.googlecloud.apikey).then(function(text) { return event.data.adminRef.update({ ocr: text }); }); });

Entonces, como pueden ver, este último archivo realmente se trata de conectar el "método de trabajo" ocr.extract_text a la ubicación de la base de datos.

Tenga en cuenta que este es un proyecto de hace un tiempo, por lo que parte de la sintaxis (principalmente la parte de functions.env ) podría haber cambiado un poco.