在本地托管的Firebase应用程序中使用本地模拟的https.onCall Firebase函数

在本地托管的Firebase应用程序中使用本地模拟的https.onCall Firebase函数,firebase,google-cloud-platform,google-cloud-functions,Firebase,Google Cloud Platform,Google Cloud Functions,我正在客户端使用NodeSDK和vanilla JavaScript编写Firebase应用程序。我正在使用Firebase云函数实现一个服务器,该服务器接收对我的页面路由的请求,并使用https.onRequest方法返回呈现的HTML。我还使用云函数来处理与https.onCall方法的客户机-服务器交互 我使用firebase-serve命令进行本地开发。在本地开发时,我的客户端似乎忽略了我的本地onCall函数,而不是调用已部署的onCall函数的路由。我被迫部署onCall函数,以便在

我正在客户端使用NodeSDK和vanilla JavaScript编写Firebase应用程序。我正在使用Firebase云函数实现一个服务器,该服务器接收对我的页面路由的请求,并使用
https.onRequest
方法返回呈现的HTML。我还使用云函数来处理与
https.onCall
方法的客户机-服务器交互

我使用
firebase-serve
命令进行本地开发。在本地开发时,我的客户端似乎忽略了我的本地
onCall
函数,而不是调用已部署的
onCall
函数的路由。我被迫部署
onCall
函数,以便在本地查看更改。如果我没有部署每个更改,我的本地应用程序将不会显示对
onCall
功能的任何更改。无论我运行
firebase-service
还是
firebase-service--only=hosting,functions
,都会发生这种情况

当我使用
firebase-service
在本地运行我的应用程序时,页面通常托管在
localhost:5000
上。这些函数托管在
localhost:5001
上。如果我在其中一个本地托管页面上调用云函数,如
firebase.functions().httpscalable('functionName')
,并检查我的开发工具中的网络面板,我可以看到请求URL是
https://us-central1-.cloudfunctions.net/
,而不是
localhost:5001//us-central1/

这让我很沮丧,因为这意味着我必须部署我的函数来测试每个更改,而不是通过本地托管的web应用程序测试本地函数

我是否配置了错误的东西?如何让本地托管的应用程序使用本地模拟的
onCall
云功能

我没有制作单页应用程序或使用任何视图框架。

Firebase似乎还没有实现指向本地服务器的解决方案,所以我想出了一个小技巧。包括下面初始化Firebase项目的代码段。希望有帮助

编辑:与下面评论的goker.cebeci一样,连接本地仿真器的正确方法是使用
functions.useFunctionsEmulator('http://localhost:5001)
(更改
http://localhost:5001
到本地模拟器运行的任何地址)

更新后的代码如下所示:

if (process.env.NODE_ENV === 'development') {
  const functions = firebase.functions()
  functions.useFunctionsEmulator('http://localhost:5001')
}

这是在客户端还是服务器端使用的?我似乎无法使它按预期工作。你能提供更多的上下文吗?这完全取决于你的配置。我正在使用Vue和预构建的env变量配置。在开发期间,节点_ENV将是“开发”,而在为生产构建时,节点_ENV将是“生产”,因此上述代码将被忽略。如果这对您没有帮助,可能会有帮助,因为您使用的是环境变量,我假设您将此块放在服务器端函数初始化的地方,放在类似
functions/index.js
的文件中。您能否提供一个大的示例块,显示您的代码引用的特定
firebase
变量,以及与函数定义相关的此声明应来自何处?不,这些是客户端变量。你可以看到。您可以在此模板中看到Vue如何利用这些功能,例如:您还可以使用
函数。useFunctionsEmulator('http://localhost:5001');
if (process.env.NODE_ENV === 'development') {
  const functions = firebase.functions()
  functions.useFunctionsEmulator('http://localhost:5001')
}