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”)。
这是可行的,当然,但它消除了安全性和环境配置的一些便利性。最终,肯定会有人进行生产部署而忘记进行该切换……在我们的情况下,即使是使用生产变量测试服务器的意外部署也是有害的,因为它会弄乱我们的搜索索引。
我错过了什么?如何自动切换?
我终于找到了一种方法来做到这一点。
事实证明,您可以在任何时候使用以下方法访问函数中的项目名称:
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)
如果有人找到更好和/或更简洁的方法,请分享!
| 归档时间: |
|
| 查看次数: |
1638 次 |
| 最近记录: |