Node.js 在本地运行Node test.js时访问本地Firebase环境变量
我有以下简单的Node.js 在本地运行Node test.js时访问本地Firebase环境变量,node.js,firebase,google-cloud-functions,Node.js,Firebase,Google Cloud Functions,我有以下简单的test.js: const functions = require('firebase-functions'); console.log(functions.config().supportgmail.email); 在运行node test.js之前,我已经做了以下工作: const functions = require('firebase-functions'); console.log(functions.config().supportgmail.email); f
test.js
:
const functions = require('firebase-functions');
console.log(functions.config().supportgmail.email);
在运行node test.js
之前,我已经做了以下工作:
const functions = require('firebase-functions');
console.log(functions.config().supportgmail.email);
firebase函数:config:get>.runtimeconfig.json
firebase模拟器:启动
node test.js
node test.js
后,出现以下错误,并且环境变量未输出到控制台:
{"severity":"WARNING","message":"Warning, FIREBASE_CONFIG and GCLOUD_PROJECT environment variables are missing.
Initializing firebase-admin will fail"}
我还需要在
test.js
中做什么才能访问本地Firebase环境变量?请注意,当我在本地运行整个web应用程序项目时,访问本地环境变量没有问题,除非我使用node test.JS
独立运行JS——我只想让我新创建的需要访问环境变量的函数工作,然后再将其合并到我的应用程序项目中。谢谢 使用节点v10部署函数时会发生此错误(如果您没有使用节点10,请告诉我)。这是由firebase函数中的错误引起的。节点10环境不再包括GCLOUD_项目。作为一种解决方法,您可以在代码中添加以下行:
process.env.GCLOUD_PROJECT = JSON.parse(process.env.FIREBASE_CONFIG).projectId
或者,您可以降级到节点8,直到解决此问题
另外,请尝试重新部署云功能
还请查看以下关于此问题的GitHub线程
************更新**************
根据以下消息:
您请求的“节点”版本“10”与您的全局版本“12”不匹配。如果不是,则该消息不是错误。它只是让您知道您的package.json声明了目标节点版本10,但您正在计算机上使用节点12进行模拟。要删除此消息,请在计算机上安装节点10而不是节点12。反之亦然
请确保在引擎字段中选择哪个
根据,声明如下:
Firebase SDK for Cloud Functions 2.0.0 and higher allows a selection of Node.js runtime
当您使用Node.js时,您的云功能SDK应该是2.0.0或更高版本,因此请按照以下步骤或查看以确保安装了正确的SDK:
firebase函数:config:get>.runtimeconfig.json
但是,如果您使用的是Windows PowerShell,请将上述命令替换为:
firebase函数:config:get | ac.runtimeconfig.json
最后,中缺少并陈述的要点是,当您在没有参数的情况下初始化Firebase Admin SDK时,会自动应用此配置。
请添加以下内容:
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp();
let firebaseConfig = JSON.parse(process.env.FIREBASE_CONFIG);
let project = firebaseConfig.projectId;
console.log(project);
希望能有所帮助。您使用的是什么运行时?您的package.json的engines字段表示什么?您还可以分享您正在使用的firebase工具的版本吗?运行firebase--版本。请共享您的runtimeconfig.json文件。启动我的emulator后,它显示
您请求的“节点”版本“10”与您的全局版本“12”不匹配,因此我假设我使用的是node.js的版本12。我的firebase工具版本目前是8.16.2
。很抱歉,我无法共享我的runtimeconfig.json
,它包含安全信息。我试图在我的test.js
中添加process.env.GCLOUD\u PROJECT=json.parse(process.env.FIREBASE\u CONFIG).projectId
,但是,即使在模拟器运行期间,process.env.FIREBASE\u CONFIG
似乎也未定义:SyntaxError:JSON.parse()位置0处的JSON中意外的标记u
。当我硬编码process.env[“GCLOUD\u PROJECT”]=“我的项目id”时,它会工作代码>。显然,process.env.FIREBASE\u CONFIG
在运行独立的test.js
时仍然丢失。我更新了答案,让我知道在执行前面的步骤后,您是否仍然会遇到相同的问题。不,我已经按照您所说的完成了上述所有操作,包括将firebase函数
和firebase admin
更新至最新版本,但仍然相同:SyntaxError:JSON.parse()位置0处的JSON中意外标记u
。没关系,我可以等待将来的bug修复版本。当bug修复版本发布后,只需更新您的答案。谢谢。您是否将Firebase配置设置为:让firebaseConfig=JSON.parse(process.env.Firebase_Config)?