代码之家  ›  专栏  ›  技术社区  ›  Methodician

如何将应用程序环境变量用于Firebase云函数?

  •  0
  • Methodician  · 技术社区  · 6 年前

    这是一个有角度的CLI应用程序,但这只是稍微相关。

    我们有非常典型的环境变量,在这种情况下

    src/environments/environment.ts
    

    src/environments/environment.prod.ts
    

    我只使用

    import { environment } from 'environments/environment'
    

    爱死它了!

    但是Firebase云功能实际上是一个单独的项目,有一个单独的构建过程,所以不管它使用什么,只要使用“environment.ts”,所以每次部署到生产环境时,我都要记住手动切换到从“environment.prod.ts”导入?

    我知道这一点: https://firebase.google.com/docs/functions/config-env 但我不明白它是如何解决上述问题的。也许我遗漏了一些东西,但在我看来,每次使用更麻烦的终端命令语法(也可以在导入中添加“.prod”)时,仍然必须切换变量。

    这是可行的,当然,但它消除了安全性和环境配置的一些便利性。最终有人一定会做一个生产部署,而忘记了切换。。。在我们的例子中,即使是使用生产变量测试服务器的意外部署也是有害的,因为它会扰乱我们的搜索索引。

    1 回复  |  直到 6 年前
        1
  •  5
  •   Methodician    6 年前

    我终于找到了办法。

    事实证明,在任何时候,您都可以使用以下方法访问函数中的项目名称:

    const project = process.env.GCP_PROJECT;

    enum Projects {
        mynametest = 'mynametest',
        mynameprod = 'mynameprod',
    }
    

    我导入了这两个环境,为每个环境提供了一个别名,如下所示:

    import { environment as devEnv } from '../../src/environments/environment';
    import { environment as prodEnv } from '../../src/environments/environment.prod';
    

    在我使用的相关功能中:

    const project = process.env.GCP_PROJECT;
    let currentEnv;
    if (project === Projects.mynametest) {
        currentEnv = devEnv;
    } else if (project === Projects.mynameprod) {
        currentEnv = prodEnv;
    } else {
        console.error('No valid environment for <something relevant here>');
        return null;
    }
    // use "currentEnv.<myVar>" as you would normally use "environment.<myVar>"
    

    如果有人找到更好和/或更简洁的方法,请分享!