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



我有一个web应用程序,目前使用Firestore作为数据库与Firebase Auth。我设置了它,以便在开发时尝试连接到Firebase模拟器,如下所示:

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

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

当通过Vite运行开发服务器时,这很好,这是我一直在使用的。但是,我最近将该项目设置为在Firebase托管上运行,并且我发现在运行托管模拟器时没有设置process.env.NODE_ENV。是否有另一种方法来确定应用程序是否被托管从模拟器(即开发)或在真正的Firebase托管服务?

澄清一下,我需要在应用程序的客户端代码中运行这个检查,这是通过Firebase托管静态托管的。我不关心服务器端Firebase云功能(见这个问题的答案)。

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

另一种选择是根据所呈现页面的主机名(即window.location.hostname === 'localhost')进行切换,但这意味着您的开发代码将与您的生产代码一起提供服务。

你可以设置两个"public"文件夹—一个用于开发编译你的代码,另一个用于生产编译你的代码(使用firebase deploy时确保部署)。然后,您将使用npm/yarn脚本来编译和提供(甚至可能是热加载)相关版本。你怎么做取决于你使用什么工具来完成你的构建步骤。

const debug = process.env.FUNCTIONS_EMULATOR === 'true';

相关内容

  • 没有找到相关文章

最新更新