angular - 如何为 Firebase Cloud Functions 使用应用程序环境变量?

标签 angular firebase environment-variables google-cloud-functions

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

我们有非常典型的环境变量,在本例中是在任一个下

src/environments/environment.ts

src/environments/environment.prod.ts

我只使用

导入我的环境
import { environment } from 'environments/environment'

但是,如果我运行“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

最佳答案

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

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

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>"

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

关于angular - 如何为 Firebase Cloud Functions 使用应用程序环境变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53233382/

相关文章:

bash - 如何为整个命令应用环境变量

javascript - 如何在 Angular 组件中设置选项的选定标志?

部署在 tomcat 上的 Angular 4 应用程序在 okta 身份验证后无法正确重新路由

java - 无法使用 Firebase 将元素添加到 ArrayList

java - list 合并失败:属性application @ appComponentFactory无法解决此问题

拉维尔 5.8。如何在 webpack.mix.js 中使用 .env 文件的变量

c++ - 阻止库调用 getenv?

angular - 在 Angular 中包含导航栏的最佳方式?

Angular 2 react 形式字段启用/禁用

firebase - 如何:在注册/创建时设置Firebase用户的个人资料信息? ( flutter 网)