如何在PC上本地testingFirebase的云端function

今天,Firebase发布了其全新的Firebase云端function ,我刚刚创build了一个Hello Worldfunction,并将其部署到我现有的Firebase项目中。

它看起来像捆绑所有的依赖关系,并将其上传到firebase,就像aws lambda函数一样。 但即使对代码进行细微的更改,也需要花费太多的时间来完成,并且还需要良好的互联网连接。 如果您由于某种原因而处于脱机状态,那么您只是在黑暗中编写了哪些代码,直到您有方法在本地计算机上脱机执行和testing这些function。

有没有办法在本地testingFirebase的云端函数?

firebaser在这里

你的函数的部署的确需要比我通常愿意等待的更多的时间。 我们正在努力改善这一点(正如布伦丹所说)正在开发一个本地模拟器。

但目前,我主要是将我的实际业务逻辑先写入一个单独的Node脚本中。 这样我可以从本地命令提示符使用node speech.js来testing它。 一旦我满意的function,我要么复制/粘贴到我的实际函数文件或(更好)导入speech模块到我的函数文件,并从那里调用它。

我迅速挖掘的一个缩写示例是,当我使用Cloud Vision API为文本提取进行布线时。 我有一个名为ocr.js的文件,其中包含:

 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; 

然后在我的函数index.js中,我有:

 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 }); }); }); 

所以你可以看到最后一个文件实际上只是将“工作方法” ocr.extract_text连接到数据库位置。

注意这是一个刚刚开始的项目,所以一些语法(主要是functions.env部分)可能已经改变了一些。

firebaser在这里

还没。 有一个云端函数模拟器,但目前不支持使用Firebase SDK编写的函数。 本地模拟器支持位于我们列表的最上方,我们将尽快提供。

在本地运行函数

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

要使用此function,firebase-tools必须具有最低版本3.8.0,并且firebasefunctionSDK必须具有最低版本0.5.7。 要同时更新,请在项目的functions /目录中运行以下命令:

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

要在本地运行function,请使用firebase服务:

 firebase serve --only functions # to only emulate functions 

警告:实验特征。 这是一个实验function,目前仅支持仿真HTTPSfunction。

更新:

嘿function可信testing人员,

我们刚刚发布了firebase-tools v3.11.0,它支持用于模拟所有types函数的交互式shell,并用testing数据调用它们。 感谢你们中的许多人参加这个function的反馈会议。

请参阅我们的文档以了解如何使用这个令人兴奋的新function!

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

在这里回答: https : //github.com/firebase/firebase-functions/issues/4#issuecomment-286515989

Google Cloud Functions也开源了一个本地模拟器,我们正在努力与Firebase的Cloud Functionsbuild立更紧密的集成。 同时,您可以在这里查看: https : //github.com/GoogleCloudPlatform/cloud-functions-emulator/

模拟器允许您在本地运行function。 以下是说明如何使用它的文档: https : //cloud.google.com/functions/docs/emulator

现在有一个云function模拟器,可以让你在本地调用函数

一旦我完成我的PoC,我将更新这个答案,包括我使用的代码和步骤。