这是一个 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/