检测 Firebase 应用程序是由模拟器托管还是在生产环境中

问题描述 投票:0回答:3

我有一个 Web 应用程序,当前使用 Firestore 作为带有 Firebase Auth 的数据库。我已将其设置为在开发时尝试连接到 Firebase 模拟器,如下所示:

if(process.env.NODE_ENV === "development") {
    connectFirestoreEmulator(firestoreDb, "localhost", 8080);
}

我还使用这种技术在不开发时禁用一些浏览器内测试。

通过 Vite 运行开发服务器时效果很好,这是我一直在使用的。但是,我最近将项目设置为在 Firebase 托管上运行,我发现运行托管模拟器时未设置

process.env.NODE_ENV
。是否有另一种方法可以确定应用程序是从模拟器托管(即用于开发)还是在真正的 Firebase 托管服务上托管?

为了澄清,我需要在应用程序的客户端代码中运行此检查,该代码将通过 Firebase 托管静态托管。我不关心服务器端 Firebase Cloud Functions(有关该问题的答案,请参阅此问题)。

javascript firebase firebase-hosting firebase-tools
3个回答
1
投票

静态托管代码没有“开发”与“生产”的概念 - 这是服务器端功能。在模拟器上托管代码之前,您必须在构建步骤中进行区分。

另一种方法是根据渲染页面的主机名进行切换(即

window.location.hostname === 'localhost'
),但这意味着您的开发代码将与您的生产代码一起提供。

因此,您将设置两个“公共”文件夹 - 一个用于代码的开发编译,另一个用于代码的生产编译(使用

firebase deploy
时部署)。然后,您可以使用
npm
/
yarn
脚本来编译和提供(甚至可能热重载)相关版本。如何进行此操作取决于您使用什么工具来执行构建步骤。


0
投票
const debug = process.env.FUNCTIONS_EMULATOR === 'true';

0
投票

如果您使用以下命令启动 Firebase 模拟器

firebase emulators:start
process.env
将包含一个属性

FUNCTIONS_EMULATOR: true

您可以在运行时检查

if (process.env.FUNCTIONS_EMULATOR) {
  // do things only when running on emulator
}
© www.soinside.com 2019 - 2024. All rights reserved.