【问题标题】:Nuxt SPA Firebase Hosting: Read Configuration from the __/firebase/init.js fileNuxt SPA Firebase 托管:从 __/firebase/init.js 文件中读取配置
【发布时间】:2021-10-30 12:33:57
【问题描述】:

如您所知,所有 Firebase 托管都提供了一个 __/firebase/init.js,其中包含 apiKey、项目 ID 等。

我正在尝试以读取配置表单的方式托管我的 SPA,而不是在构建期间对其进行硬编码。

这是我的 nuxt.config.js:

[
      '@nuxtjs/firebase',
      {
        config: {
          production: {
            apiKey: '',
            appId: '',
            authDomain: '',
            messagingSenderId: '',
            projectId: '',
            storageBucket: '',
          },
        },

        onFirebaseHosting: true,

        // customEnv: true,
        services: {
          auth: {
            persistent: 'local',
            initialize: {
              onAuthStateChangedAction: 'onAuthStateChanged',
            },
            ssr: false, // default
          },
        },
      },

当我在 Firebase 托管中部署应用程序时,我收到以下错误:

如您所见,配置未获取。

源代码有这些提示:

https://github.com/nuxt-community/firebase-module/blob/217ac819e36a8a74159eb3c2625a98f14ed5cfd0/lib/module.js#L106

https://github.com/nuxt-community/firebase-module/blob/217ac819e36a8a74159eb3c2625a98f14ed5cfd0/lib/sw-templates/firebase-auth-sw.js#L7

const ignorePaths = <%= serialize(options.ignorePaths) %>

<% if (options.loadFromFirebaseHosting) { %>
// Only works on Firebase hosting!
importScripts('/__/firebase/<%= options.firebaseVersion %>/firebase-app.js')
importScripts('/__/firebase/<%= options.firebaseVersion %>/firebase-auth.js')
importScripts('/__/firebase/init.js')

我想知道这是否可以通过 SPA 实现,因为它都是预先构建的。我能以某种方式从这个文件动态生成配置吗?

【问题讨论】:

    标签: firebase nuxt.js firebase-hosting


    【解决方案1】:

    /__/firebase/init.js 脚本很特别,因为 Firebase 托管会自动确定您为哪个项目调用它并返回该项目的配置设置。为了能够做到这一点,它需要在知道 Firebase 的环境中执行,例如 Firebase Hosting 本身或 Hosting 模拟器。

    可以做的是将必要的配置注入您的应用程序,而不是从/__/firebase/init.js 中提取。两种情况下的配置块如下所示:

    const firebaseConfig = {
      //...
    };
    
    const app = initializeApp(firebaseConfig);
    

    另请参阅 setting up in Node.js apps 的 Firebase 文档,这与您在这种情况下所做的最接近。

    【讨论】:

    • 谢谢。您的意思是在应用程序本身中设置 apiKey、appId 等配置键吗?这就是我要避免的,以便我的应用程序可以在具有该环境配置的任何 Firebase 托管环境中工作,而无需我在 SPA 中对其进行硬编码。我正在测试的当前托管环境也是 Firebase 托管环境。我正在使用nuxt-firebase 模块。
    • 嗯...在这种情况下,您可能需要检查 init.js 实际包含的内容,以及这些是否是您尝试使用的项目的 API 密钥。
    • 是的,我应该在 nuxt.config.js 文件中包含的任何内容都在其中,并且它是为每个 Firebase 托管项目动态生成的。
    • 嗯...我不确定在这种情况下错误来自哪里。我希望其他人发现它。
    • 谢谢。感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 2019-02-08
    • 2018-10-02
    • 2018-04-08
    • 2014-10-23
    • 2018-03-04
    相关资源
    最近更新 更多