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:

  • 将SDK更新至最新版本如果尚未更新,请在functions文件夹中运行以下操作:
  • npm安装firebase-functions@latest--保存 npm安装firebase-admin@latest——准确地保存

  • 同时将Firebase CLI更新至最新版本:
  • npm安装-g firebase工具

    如果您希望使用firebase serve对函数进行局部模拟以拾取环境变量,则需要遵循下一步

    如果使用自定义函数配置变量,请运行 之前,请在项目的函数目录中执行以下命令 火箭筒发球

    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)?