gpt4 book ai didi

node.js - 如果我正在开发或生产中,如何告诉 firebase? (对于 firebase 函数沙箱/实时开关)

转载 作者:行者123 更新时间:2023-12-05 09:32:12 27 4
gpt4 key购买 nike

我有一些在本地测试的 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_IDPROD_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 PRODnpm run deploy .

确保在编辑您的函数配置(functions.config() 值)时,您在两个 TEST_PROJECT_ID 上都设置了它们和 PROD_PROJECT_ID使用适当的键。

有许多环境变量可用于执行 Cloud Functions,但只有 Google Cloud 包含的那些和 Firebase有保证值:

<表类="s-表"><头>键描述注意<正文> 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com