【问题标题】:How do you setup local environment variables for Cloud Functions for Firebase如何为 Cloud Functions for Firebase 设置本地环境变量
【发布时间】:2017-11-29 16:42:21
【问题描述】:

我正在使用 http 云函数来侦听请求,然后返回一条简单的消息。

我正在本地开发云功能:

firebase serve --only functions

我已经使用

设置了一些自定义环境变量
firebase functions:config:set

在部署项目时使用以下代码访问自定义配置变量可以正常工作

 functions.config()

但在本地开发时不起作用。当通过点击触发功能时:http://localhost:5002/my-project-name/us-central1/functionName 我无法访问自定义配置变量。在本地使用 functions.config() 时,我可以看到默认配置,而不是我的自定义配置变量

在本地工作时,环境变量是否有替代解决方案或最佳实践?

【问题讨论】:

  • 当您说您在本地开发时,您能否更具体地说明您在做什么?
  • @DougStevenson 我更新了这个问题。希望这能让我更清楚地了解我在做什么
  • 我遇到了同样的问题。我将在内部提交一个错误(我在 Firebase 团队中)。随时在firebase.google.com/support/contact/bugs-features 留下错误报告

标签: firebase google-cloud-functions


【解决方案1】:

到目前为止,您必须通过运行此命令手动创建一个.runtimeconfig.json 文件在您的函数目录中。然后运行 ​​serve 命令。

firebase functions:config:get > .runtimeconfig.json

如果您使用的是 Windows Powershell,请将上面的内容替换为:

firebase functions:config:get | ac .runtimeconfig.json

您可以在https://firebase.google.com/docs/functions/local-emulator了解更多信息

【讨论】:

  • 您能否详细说明本地配置集以测试发送 FCM 通知的功能?
  • 我的触发器在用户创建时启动 FCM 通知。它在 Firebase 服务器上工作,但在本地测试我有错误:“信息:功能崩溃 { 错误:尝试对 FCM 服务器进行身份验证时发生错误。确保用于验证此 SDK 的凭据具有适当的权限。请参阅@ 987654322@ 用于设置说明。原始服务器响应:“ 未授权

    未授权

    错误 401

    “。状态码:401。”
  • 这里稍微注意一下,上面引用的 json 文件必须在你的 functions 目录中,就像提到的帖子一样,所以只需运行上面的片段而不首先在函数目录中(假设你'而不是在firebase proj的根目录中)将不起作用。在这种情况下,您必须改为运行 firebase functions:config:get > functions/.runtimeconfig.json 之类的东西。
  • 不适合我。我在使用“functions:config:get > .runtimeconfig.json”生成的“functions”目录中有“.runtimeconfig.json”。但是当我在本地主机中并在我的项目中执行“functions.config()”时,它会返回一个空对象。
  • @Cabuxa.Mapache 你知道为什么它返回一个空对象吗?我遇到了同样的问题,因为每当我在 Mac 上运行 firebase functions:config:get > .runtimeconfig.json 时,它实际上会用一个空的 JSON 对象替换该文件中的所有数据......我尝试使用不同的文件名,如 .devConfig.json.serveConfig.json,但是我在命令中提供的任何文件名都会被一个空的 JSON 对象覆盖。
【解决方案2】:

对于那些想要使用环境变量(process.env)的人,我遵循这个解决方法。

在部署前设置配置值

firebase functions:config:set envs.db_host=$DB_HOST_PROD envs.db_user=$DB_USER_PROD envs.db_password=$DB_PASSWORD_PROD envs.db_name=$DB_NAME_PROD envs.db_use_ssl=false

首先阅读配置并更新函数代码下的环境变量。

const functions = require('firebase-functions');
const config = functions.config();

// Porting envs from firebase config
for (const key in config.envs) {
    process.env[key.toUpperCase()] = config.envs[key];
}

【讨论】:

    【解决方案3】:

    您可以保留一个名为 .env.json 的文件,并在触发部署命令时加载它

    {
      "name": "project",
      "version": "0.0.0",
      "scripts": {
        "deploy": "npm run env && firebase deploy --only functions",
        "env": "test -f env.json && firebase functions:config:unset env && firebase functions:config:set env=\"$(cat env.json)\" || echo \"Please add the file env.json before deploy.\""
      },
      "dependencies": {
        "firebase-functions": "^3.1.0"
      },
      "devDependencies": {
        "firebase-functions-test": "^0.1.6"
      }
    }
    

    【讨论】:

      【解决方案4】:

      我已将问题范围缩小到 Windows Powershell。

      在 powershell 中运行 firebase functions:config:get > .runtimeconfig.json 会生成一个损坏的 json,我不知道为什么,它在解析时会在位置 0 处的 JSON 中给出 Unexpected token。

      我已经设法通过在 Windows 命令提示符下运行 .runtimeconfig.json 生成命令来解决它。

      【讨论】:

        【解决方案5】:

        我不确定最受好评的答案是否有效,但对于 mac 上的 firebase 功能(本地服务),我会这样做

        npm run admin-keys && export dev=true && firebase emulators:start
        

        管理员密钥在哪里

        "admin-keys": "export GOOGLE_APPLICATION_CREDENTIALS='./.keys/admin.keys.json'"
        

        这将从.runtimeconfig.json加载配置

        对于生产,您必须通过执行类似操作手动设置它

        firebase functions:config:set facebookCred.secret="something"
        

        【讨论】:

          猜你喜欢
          • 2021-09-23
          • 2019-04-13
          • 1970-01-01
          • 1970-01-01
          • 2023-04-06
          • 2021-11-30
          • 1970-01-01
          相关资源
          最近更新 更多