如何为 Firebase Cloud Functions 使用应用环境变量?

Met*_*ian 5 environment-variables firebase google-cloud-functions angular

这是一个 Angular CLI 应用程序,但这只是稍微相关。

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

src/environments/environment.ts
Run Code Online (Sandbox Code Playgroud)

或者

src/environments/environment.prod.ts
Run Code Online (Sandbox Code Playgroud)

我只使用导入我的环境

import { environment } from 'environments/environment'
Run Code Online (Sandbox Code Playgroud)

但是,如果我运行“ng build”,它使用“environment.ts”,如果我运行“ng build --prod”,它使用“environment.prod.ts”

纯粹的魔法。

爱它!

但是 Firebase Cloud Functions 实际上是一个单独的项目,具有单独的构建过程,所以不管它只使用“environment.ts”,所以我必须记住每次部署时手动切换到从“environment.prod.ts”导入生产?

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

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

我错过了什么?如何自动切换?

AskFirebase

Met*_*ian 5

我终于找到了一种方法来做到这一点。

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

const project = process.env.GCP_PROJECT;

就我而言,我为我的两个主要项目创建了一个枚举,如下所示:

enum Projects {
    mynametest = 'mynametest',
    mynameprod = 'mynameprod',
}
Run Code Online (Sandbox Code Playgroud)

我导入了两个环境,给每个环境一个别名,如下所示:

import { environment as devEnv } from '../../src/environments/environment';
import { environment as prodEnv } from '../../src/environments/environment.prod';
Run Code Online (Sandbox Code Playgroud)

在我使用的相关功能中:

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>"
Run Code Online (Sandbox Code Playgroud)

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