这是一个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”)。>
这确实是可行的,但它消除了安全性以及环境配置的某些便利性。最终,有人必然会进行生产部署,而忘记进行切换……在我们的情况下,即使是偶然部署以生产变量测试服务器也是有害的,因为这会破坏我们的搜索索引。
我想念什么?如何自动切换?
答案 0 :(得分:1)
我终于找到了一种方法。
事实证明,您可以随时使用以下命令在函数中访问项目名称:
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>"
如果有人发现一种更好和/或更简洁的方法,请分享!