- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一些在本地测试的 firebase 函数,但我真的不想依赖于记住切换标志或显式设置值。我可以在 firebase 中检查一个值来判断它是在开发中还是在生产中?我也在使用 NextJS,所以我也不介意在下一个方面改变它。在 Firebase 生态系统中任何最有意义的方式。谢谢!
在我的函数中调用客户端(在 firebase 上):
const env = new checkoutNodeSDK.core.SandboxEnvironment(clientId, clientSecret)
我的 firebase.js 文件:
import firebase from 'firebase/app'
import 'firebase/auth'
import 'firebase/firestore'
import 'firebase/functions'
const dev = true
export const app = !firebase.apps.length ? firebase.initializeApp({
apiKey: "REDACTED",
authDomain: "edit-elements.firebaseapp.com",
databaseURL: "https://edit-elements-default-rtdb.firebaseio.com",
projectId: "edit-elements",
storageBucket: "edit-elements.appspot.com",
messagingSenderId: "340652433701",
appId: "1:340652433701:web:a26472592c1538bbac7acc",
measurementId: "G-945XC7348K"
}) : firebase.app()
const auth = app.auth()
const db = app.firestore()
const functions = app.functions()
if (process.env.NODE_ENV === 'development') {
functions.useEmulator('localhost', 5001)
db.useEmulator('localhost', 8080)
}
export { auth, db, functions }
我想设置如下:
const env = flagDev ? new checkoutNodeSDK.core.SandboxEnvironment(clientId, clientSecret) : new checkoutNodeSDK.core.LiveEnvironment(clientId, clientSecret)
TL;DR - 在开发中调用该函数时,我希望该函数使用 Sandbox 凭据。在产品中,我想使用实时沙箱凭据。
最佳答案
如果目的是检测当前运行的 Cloud Function 是否正在被模拟,您可以检查 FUNCTIONS_EMULATOR
环境变量。
const isEmulated = process.env.FUNCTIONS_EMULATOR === "true";
但是,正如 Doug 所说,您不应该盲目相信这个值。虽然它现在有一个值并且可以工作,但这是一个未记录的环境变量,由 Firebase Emulator Suite 在内部使用。
最好的做法是使用不同的 PROJECT_ID
完全适用于您的本地环境,只有在一切顺利时才部署到您的生产项目。
获取您的 PROJECT_ID
用于事件云功能,使用:
const PROJECT_ID = JSON.parse(process.env.FIREBASE_CONFIG).projectId;
然后假设你有一个 TEST_PROJECT_ID
和 PROD_PROJECT_ID
,您现在可以使用以下方式检查您是否在生产中:
const isProduction = PROJECT_ID === PROD_PROJECT_ID;
在您的系统上进行测试时,您应该使用 TEST_PROJECT_ID
:
firebase use TEST_PROJECT_ID
一旦您对更改点亮绿灯,您就可以部署到 PROD_PROJECT_ID
:
firebase deploy --project PROD_PROJECT_ID
您还可以将这些项目 ID 添加到 .firebaserc
:
{
"projects": {
"default": "TEST_PROJECT_ID",
"TEST": "TEST_PROJECT_ID",
"PROD": "PROD_PROJECT_ID"
}
}
在您的主项目目录中,创建一个 package.json
文件:
{
"name": "my-firebase-project",
"version": "1.0.0",
"private": true,
"description": "",
"main": "",
"scripts": {
"deploy": "firebase deploy -P PROD"
},
"keywords": [],
"author": "You",
"license": "NONE"
}
添加相同的"deploy"
脚本到你的 functions/package.json
:
"scripts": {
"deploy": "firebase deploy -P PROD"
}
现在,当您想要部署到生产环境时,您可以使用:firebase deploy -P PROD
或 npm run deploy
.
确保在编辑您的函数配置(functions.config()
值)时,您在两个 TEST_PROJECT_ID
上都设置了它们和 PROD_PROJECT_ID
使用适当的键。
有许多环境变量可用于执行 Cloud Functions,但只有 Google Cloud 包含的那些和 Firebase有保证值:
FUNCTION_TARGET
预留:待执行的函数
FUNCTION_SIGNATURE_TYPE
保留:函数类型:
http
用于 HTTP 函数,以及
event
用于事件驱动函数。
K_SERVICE
预留:函数资源名称替换
FUNCTION_NAME
在遗留代码中
K_REVISION
保留:函数的版本标识。
PORT
保留:调用函数的端口。
FIREBASE_CONFIG
转载:Firebase项目配置JSON编码字符串
关于node.js - 如果我正在开发或生产中,如何告诉 firebase? (对于 firebase 函数沙箱/实时开关),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68310042/
我想要 angularJs 中的一个按钮,当我按下它时会调用一个函数,当我再次按下它时它会执行另一个功能,比如 ON-OFF 开关。 我有这个: 我会在单击一次时调用另一个函数。 最佳答案 您可
我有一个相当大的 switch 语句(或同样大的 if 语句),我想在 Doxygen 中记录一些方法,可能是调用者图,或者可能是某种流程图格式。 我怎样才能做到这一点? 谢谢 ! 最佳答案 通常 d
public int[] Level1Items(int floor) { switch (floor) { case 0: case 1:
我有一些R代码看起来基本上是这样的: compute.quantiles <- function(mu, type) { ## 'mu' and 'type' are vectors of the
嗨,我正在尝试处理 ajax json 响应 这是我的代码 success: function (j) { switch(true) { case (j.cho
我在尝试在 Javascript 中进行切换时遇到问题,当切换激活时,根据情况,程序将显示许多新按钮,您可以单击这些按钮并播放声音。 这是我的 HTML 和 Javascript,带有第一组按钮: f
static double rSetzen(){ double r; System.out.println("Sind sie männlich oder weiblich?");
作为我用 Haskell 编写的迷你解释器的一部分,我正在编写一个执行以下操作的函数:如果是 eval (App e1 e2) ,我想递归评估 e1 ( eval e1 ),将结果设置为 v1 .然后
对于C语言,我知道我很接近,但是对于输入的任何字符,打印输出都是“辅音”。我的 switch case 语句有什么问题。我需要 if 语句吗? #include #include int main
我有以下方法,它以类的类型作为参数: public void test(Type proType){ } 我目前有一个很大的 if else 看起来像: if(proType == typeof(Cl
我正在编写带有开关功能的代码。我希望我的默认代码打印“错误”并使程序停止运行。我应该在默认值末尾添加 return 1; 吗? 如果是这样,这样对吗? switch (course3) { c
VB.NET,但 C# 也可以。 我有一个 MustInherit 基类和 170 个基于它的继承类。为什么这么多?因为每个继承的类在 Sub New() 中做了不同的事情。继承的类型不添加任何新属性
在我的开关中,我希望案例从 0 变为 (number_of_cases-1),而无需自己编写数字。因此,如果我在中间删除一个 case block ,则以下 case 将重新编号(减 1),以便再次从
我想在我的应用中使用精确的 Material 开关。正是谷歌设计指南中的那些。 https://www.google.com/design/spec/components/selection-cont
有没有比我使用的更好的方法来实现切换/开关。它有效,但对我来说似乎很笨拙。 var foo = true; $(document).on("click","$element",function(){
我尝试将全局变量与 switch 语句一起使用,但变量的值没有改变。也许是范围问题? 我需要一个 switch 语句来逐一循环遍历每种情况,但每次我在控制台中查看时,“i”变量都会重置为 1。 为什么
我最近在一个网站上工作,在本地主机上一切正常,但是当我将它移到服务器上时,更改 div 函数开始加载怪异,我不知道为什么。当您循环浏览投资组合按钮和联系人按钮时,该错误会更加明显。 该网站仅针对 Fi
我一直在开发一个使用 switch() 函数的项目,如下所示: switch (selectedMenu) { case 1: switch (selectedIndex) {
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: Variable declaration in c# switch statement 我一直想知道: 当我
我有一个奇怪的问题,我似乎无法解决。我有相当复杂的代码,但我已经简化了它,问题仍然存在。 请参阅以下内容: 'correct'); switch (true) { case empty($m
我是一名优秀的程序员,十分优秀!