这是一个Angular CLI应用程序,但它只是稍微相关。
我们有非常典型的环境变量,在这种情况下,在下
src/environments/environment.ts
或
src/environments/environment.prod.ts
我只使用导入我的环境
import { environment } from 'environments/environment'
但是,如果我运行"ng-build",它将使用"environment.ts",如果我执行"ng-bbuild--prod",它则使用"envronment.prod.ts">
纯粹的魔法
喜欢它
但是Firebase Cloud Functions实际上是一个独立的项目,有一个独立构建过程,所以无论它只是使用"environment.ts",所以每次部署到生产环境时,我都必须记住手动切换到从"environmental 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>"
如果有人找到了更好和/或更简洁的方法,请分享!