如何将应用环境变量用于 Firebase Cloud Functions?
Posted
技术标签:
【中文标题】如何将应用环境变量用于 Firebase Cloud Functions?【英文标题】:How can I use app environment variables for Firebase Cloud Functions? 【发布时间】:2019-04-13 11:24:16 【问题描述】:这是一个 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”)。
这是可行的,当然,但它消除了安全性和环境配置的一些便利性。最终有人必然会进行生产部署而忘记进行该切换......在我们的情况下,即使是使用生产变量测试服务器的意外部署也是有害的,因为它会弄乱我们的搜索索引。
我错过了什么?如何自动切换?
询问Firebase
【问题讨论】:
如果您想自动化某些事情,请考虑编写脚本来完成这项工作。甚至更好的是,使用 CI/CD 系统来消除人为错误的可能性。这就是成熟的开发团队会做的事情,以尽量减少错误。 听起来不错。我如何/在哪里可以为云功能模块编写一个脚本来识别 Angular 项目的构建环境?函数本质上表现为它自己的项目,具有自己的 package.json 等... TBH,我实际上不知道 Angular CLI 项目如何识别“--prod”被附加到“ng build”以使用不同的环境多变的。主项目的 package.json 只有“构建”脚本,而 angular.json 指定了“配置”下的替换,但不会延续到函数。 我对 Angular 一无所知。无论如何,您的 Web 应用程序将与您的功能完全分开部署。不过,您的问题非常广泛 - 是时候对脚本进行一些研究了,然后当您遇到更离散的问题时再发回这里。 【参考方案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>"
如果有人找到更好和/或更简洁的方法,请分享!
【讨论】:
以上是关于如何将应用环境变量用于 Firebase Cloud Functions?的主要内容,如果未能解决你的问题,请参考以下文章