【问题标题】:Setting NODE_ENV for firebase function为 firebase 功能设置 NODE_ENV
【发布时间】:2017-08-25 16:23:19
【问题描述】:

我正在将我的一些 firebase-queue 工作人员转移到 Firebase Functions。我使用process.env.NODE_ENV 为工作人员设置了一些配置,具体取决于我运行它们的环境。有没有办法在部署它们时为这些功能设置NODE_ENV。我知道提供此类配置选项的推荐方法是通过firebase.config.set,我已经验证它可以按预期工作,但只是想检查是否有办法设置NODE_ENV。当我尝试打印出函数内部的NODE_ENV 时,它始终设置为production

【问题讨论】:

标签: firebase google-cloud-functions


【解决方案1】:

在我回答这个问题时,Firebase SDK for Cloud Functions 提供了开箱即用的内置环境配置

为您的项目设置环境配置

$ firebase functions:config:set [values...]

示例

$ firebase functions:config:set someservice.key="THE API KEY" someservice.id="THE CLIENT ID"

为您的项目获取环境配置

$ firebase functions:config:get [path]

示例

const functions = require('firebase-functions')
console.log(functions.config().someservice.id)

注意:You must redeploy functions to make the new configuration available.

【讨论】:

    【解决方案2】:

    在他们的documentation 中关注 Google 的 Best practices and reserved environment variables

    环境提供的环境变量可能会在未来的运行时版本中发生变化。作为最佳实践,我们建议您不要依赖或修改任何未明确设置的环境变量。

    基本上不使用NODE_ENV。使用您自己的环境变量并相应地设置它们。

    注意:本文档来自 Google Cloud Functions。 Firebase 函数就像谷歌云函数的包装器。检查这个question

    【讨论】:

      【解决方案3】:

      目前无法设置process.env.NODE_ENV等自定义环境变量。你想做的,只能针对谷歌云功能做,需要使用gcloud命令行工具。

      https://cloud.google.com/functions/docs/env-var#accessing_environment_variables_at_runtime

      其他选项

      如果您是专门为 Firebase 开发并需要类似的解决方案,那么可以选择。

      基于项目 ID 的条件

      如果您有测试、暂存和生产项目并希望根据环境具有不同的行为或日志记录,则可以访问项目 ID。

      process.env.GCLOUD_PROJECT 设置为您的 GCP 项目 ID,因此您可以基于此构建逻辑。

      
      if (process.env.GCLOUD_PROJECT === 'my-production-project') {
        // Only in production
      } else {
        // Do something for the test environments
      }
      
      
      

      云函数环境变量

      正如您已经提到的,还有云函数环境变量。您可以有效地创建构建管道,在构建/部署时配置您的环境配置,然后在您的云功能中访问它们。

      - firebase functions:config:set runtime.env="production" --token $FIREBASE_DEPLOY_KEY
      

      访问配置实际上与您的process.env 相同,但不能在云函数范围之外访问(即您不能在全局变量声明中使用它)。

      if (functions.config().runtime.env === 'production') {
        // Only in production
      } else {
        // Do something for the test environments
      }
      

      【讨论】:

        猜你喜欢
        • 2021-05-10
        • 1970-01-01
        • 2017-12-21
        • 1970-01-01
        • 2020-03-15
        • 2018-02-21
        • 2019-02-21
        • 2020-07-31
        • 2021-12-07
        相关资源
        最近更新 更多