如何使用 Firebase Cloud Functions 检测环境是开发还是生产环境?

     2023-02-22     41

关键词:

【中文标题】如何使用 Firebase Cloud Functions 检测环境是开发还是生产环境?【英文标题】:How to detect if environment is development or production with Firebase Cloud Functions? 【发布时间】:2019-04-10 15:28:00 【问题描述】:

如何使用 Firebase Cloud Functions 检测我的服务器环境是开发还是生产环境?

我需要这样的东西:

if(process.env.NODE_ENV === 'development')

   //DO STUFF SPECIFIC TO DEV ENVIRONMENT


else if(process.env.NODE_ENV === 'production')

   //DO STUFF SPECIFIC TO PRODUCTION ENVIRONMENT


【问题讨论】:

【参考方案1】:

process.env.FUNCTIONS_EMULATOR

process.env 中,在 firebase 函数项目中,有一个名为 FUNCTIONS_EMULATOR 的布尔变量,它指示进程是在模拟器上还是在服务器上运行。

这足以确定环境是开发还是生产。

process.env.FUNCTIONS_EMULATOR === true

Obs:在某些环境中,变量可能是字符串 'true' 而不是布尔值 true

【讨论】:

值得指出的问题是关于 server 环境,而不是本地模拟器。此答案仅适用于检测何时使用模拟器正在本地使用。这无助于确定正在使用哪个项目。模拟器无法知道正在使用的项目是否被指定用于开发或生产,或者其他什么。模拟器甚至真正关心您要使用哪个项目,因此仍然有可能犯错误以不合需要的方式影响项目。【参考方案2】:

您可以信赖process.env

截至 2020 年 7 月 28 日和 package.json

"dependencies": 
    "firebase-admin": "^8.10.0",
    "firebase-functions": "^3.6.1"
,

如果您使用 firebase 启动您的应用

firebase emulators:start

那么process.env 将具有类似的属性

"FUNCTIONS_EMULATOR": "true",
"FIRESTORE_EMULATOR_HOST": "0.0.0.0:5002",
"PUBSUB_EMULATOR_HOST": "localhost:8085"
"FIREBASE_AUTH_EMULATOR_HOST": "0.0.0.0:9099"

如果您使用 firebase 启动您的应用

firebase emulators:start --only functions

那么process.env 将具有类似的属性

"FUNCTIONS_EMULATOR": "true",

用例

基于 process.env,您可以编写 firebase.function 来预填充您的 firestore 模拟器(不是生产 firestore)!

代码示例

export const prepopulateFirestoreEmulator = functions.https.onRequest(
  (request, response) => 
    if (process.env.FUNCTIONS_EMULATOR && process.env.FIRESTORE_EMULATOR_HOST) 
      // TODO: prepopulate firestore emulator from 'yourproject/src/sample_data.json
      response.send('Prepopulated firestore with sample_data.json!');
     else 
      response.send(
        "Do not populate production firestore with sample_data.json"
      );
    
  
);

【讨论】:

【参考方案3】:

所有 Google Cloud 项目都只是项目,除了您指定其用途的方式。由于 Cloud Functions 无法知道 dev 和 prod 之间的区别,因此您需要检查项目的名称,因为这是环境中唯一发生变化的事情。使用automatically populated env vars 中的process.env.GCLOUD_PROJECT

似乎这里的其他答案假设这个问题是在询问当地的发展,但事实并非如此。很容易检测代码是否在模拟器中运行,但这并不能帮助您确定底层项目是用于开发还是生产(或其他目的)。在模拟器中运行的某些代码仍然很有可能只对底层项目产生不良影响,这对于指定为生产的项目来说是不利的。强烈建议为不同的部署运行和隔离不同的项目,这样一个项目的更改不会影响另一个项目。

【讨论】:

嗯,项目名称与 localhost fyi 相同 @JimmyKane 如果您想区分在 Cloud Functions 上运行还是在本地模拟器中运行,那是另一个问题。 groups.google.com/forum/#!topic/firebase-talk/ZVGlmFsASW4 最好的方法不是在 Firebase 中创建一个环境变量,例如 isProd,并在每个环境中将其设置为正确的布尔值吗? @DougStevenson 据说here GCLOUD_PROJECT 现在已被弃用。知道要使用什么吗?

如何使用 Firebase Cloud Messaging 在前台显示多个通知

】如何使用FirebaseCloudMessaging在前台显示多个通知【英文标题】:howshowmorethanonenotificationinforegroundwithFirebaseCloudMessaging【发布时间】:2019-09-2719:54:36【问题描述】:我在Android中有一个应用程序接收来自firebase的通知,但是当它在前... 查看详情

如何使用 graphql 从 Firebase 使用 Flutter 从 Cloud Firestore 获取数据?

】如何使用graphql从Firebase使用Flutter从CloudFirestore获取数据?【英文标题】:HowtousegraphqltogetdatafromCloudFirestorefromFirebaseusingflutter?【发布时间】:2020-05-0121:58:44【问题描述】:是否可以使用graphql在Flutter中查询Firestorefirebase的结果。... 查看详情

如何使用 Firebase Cloud Messaging 向所有设备发送通知

】如何使用FirebaseCloudMessaging向所有设备发送通知【英文标题】:HowtosendnotificationstoalldevicesusingFirebaseCloudMessaging【发布时间】:2016-07-1801:37:07【问题描述】:在Firebase文档中,它始终有一个带有设备/令牌ID的“to”字段......但我怎... 查看详情

如何使用 Firebase Cloud Firestore 对方法进行单元测试?

】如何使用FirebaseCloudFirestore对方法进行单元测试?【英文标题】:HowtounittestmethodsusingFirebaseCloudFirestore?【发布时间】:2019-02-1512:36:57【问题描述】:我正在尝试在Flutter上使用CloudFirestore。到目前为止,我已经能够使用它,但我... 查看详情

如何在不使用 Firebase Cloud Messaging 控制台的情况下向 Flutter/Firebase Cloud Messaging 上的特定设备发送通知 [重复]

】如何在不使用FirebaseCloudMessaging控制台的情况下向Flutter/FirebaseCloudMessaging上的特定设备发送通知[重复]【英文标题】:HowtosendnotificationstospecificdeviceonFlutter/FirebaseCloudMessagingwithoutusingFirebaseCloudMessagingConsole[duplicate]【发布时间】:2... 查看详情

如何使用 Firebase Cloud Functions 检测环境是开发还是生产环境?

】如何使用FirebaseCloudFunctions检测环境是开发还是生产环境?【英文标题】:HowtodetectifenvironmentisdevelopmentorproductionwithFirebaseCloudFunctions?【发布时间】:2019-04-1015:28:00【问题描述】:如何使用FirebaseCloudFunctions检测我的服务器环境是... 查看详情

如何使用 Firebase Cloud Messaging 发送图像并使用数据有效负载发出通知

】如何使用FirebaseCloudMessaging发送图像并使用数据有效负载发出通知【英文标题】:HowtosendanimageusingFirebaseCloudMessagingwithnotificationusingdatapayload【发布时间】:2019-03-1911:09:14【问题描述】:我正在为我的项目使用FCM,并在用户离线... 查看详情

使用 Firebase Cloud 功能创建用户后如何发送电子邮件验证?

】使用FirebaseCloud功能创建用户后如何发送电子邮件验证?【英文标题】:HowtosendemailverificationafterusercreationwithFirebaseCloudfunctions?【发布时间】:2017-08-0921:37:17【问题描述】:我正在尝试在创建用户后发送验证电子邮件。由于Firebas... 查看详情

如何使用 Firebase Cloud Messaging 通过网络浏览器订阅主题

】如何使用FirebaseCloudMessaging通过网络浏览器订阅主题【英文标题】:HowtosubscribetotopicswithwebbrowserusingFirebaseCloudMessaging【发布时间】:2017-03-1607:40:16【问题描述】:我正在尝试找到一种使用Firebase云消息传递向我的所有应用用户发... 查看详情

如何使用 PHP 在 Firebase 中自动导入存储桶 - Google Cloud Storage

】如何使用PHP在Firebase中自动导入存储桶-GoogleCloudStorage【英文标题】:HowdoIautoimportbucketinfirebaseusingPHP-GoogleCloudStorage【发布时间】:2021-03-2810:44:28【问题描述】:我已经创建了一个api来在firebase上创建存储桶,存储桶已在GoogleCloud... 查看详情

如何使用 Cloud Functions for Firebase 获取子值的键?

】如何使用CloudFunctionsforFirebase获取子值的键?【英文标题】:HowtogetthekeyofachildvaluewithCloudFunctionsforFirebase?【发布时间】:2019-03-1911:34:00【问题描述】:我有在添加user_course时触发的代码exportconstwritePesertaMatkul=functions.database.ref(\'/u... 查看详情

如果用户长时间没有写入,如何使用 Firebase Cloud Functions 在 Firebase 数据库中设置节点的值?

】如果用户长时间没有写入,如何使用FirebaseCloudFunctions在Firebase数据库中设置节点的值?【英文标题】:HowtosetValueofanodeinFirebaseDatabaseusingFirebaseCloudFunctionsifthereisnotwriteforlongperiodbyuser?【发布时间】:2020-04-2514:33:51【问题描述】:... 查看详情

上传到 Firebase 存储时如何使用 Cloud Functions for FIrebase 获取 mp3 文件的持续时间

】上传到Firebase存储时如何使用CloudFunctionsforFIrebase获取mp3文件的持续时间【英文标题】:Howtogetthedurationofamp3fileusingCloudFunctionsforFIrebasewhenuploadedtofirebasestorage【发布时间】:2018-01-2320:52:27【问题描述】:我正在为舞蹈应用构建音... 查看详情

如何计算使用 Cloud Firebase 在 Swift UI 中选择一个选项的人数?

】如何计算使用CloudFirebase在SwiftUI中选择一个选项的人数?【英文标题】:HowtocountthenumberofpeopleselectingoneoptioninSwiftUIusingCloudFirebase?【发布时间】:2020-10-1910:32:41【问题描述】:我的FirstView中有2个选项。之后用户选择“好”或“... 查看详情

使用 Firebase Cloud Functions 导出的问题

】使用FirebaseCloudFunctions导出的问题【英文标题】:ProblemswithexportingusingFirebaseCloudFunctions【发布时间】:2018-12-1307:59:52【问题描述】:我正在使用带有Javascript的FirebaseCloudFunctions,但在import和export语句中出现此错误。我该如何替换... 查看详情

如何将我的 Firebase 实时数据库转移到 Firebase Cloud Firestore

】如何将我的Firebase实时数据库转移到FirebaseCloudFirestore【英文标题】:HowtotransfermyFirebaseRealtimedatabasetoFirebaseCloudFirestore【发布时间】:2018-03-1521:44:18【问题描述】:我已经在使用Firebase实时数据库,但现在Firebase已经为数据库推... 查看详情

如何将我的 Firebase 实时数据库转移到 Firebase Cloud Firestore

】如何将我的Firebase实时数据库转移到FirebaseCloudFirestore【英文标题】:HowtotransfermyFirebaseRealtimedatabasetoFirebaseCloudFirestore【发布时间】:2019-04-0205:54:18【问题描述】:我已经在使用Firebase实时数据库,但现在Firebase已经为数据库推... 查看详情

如何使用 Firestore 在 Cloud Functions for Firebase 中获取服务器时间戳?

】如何使用Firestore在CloudFunctionsforFirebase中获取服务器时间戳?【英文标题】:HowdoIgettheservertimestampinCloudFunctionsforFirebasewithFirestore?【发布时间】:2018-03-2018:03:44【问题描述】:我们如何在不使用实时数据库的情况下获取服务器时... 查看详情