GatsbyJS 与 Firebase - WebpackError:ReferenceError:IDBIndex 未定义

2023-12-01

我收到错误盖茨比发展。它与这个非常相似:https://github.com/firebase/firebase-js-sdk/issues/2222,但我收到错误盖茨比发展,而不是盖茨比构建。我做了很多研究,但找不到有效的解决方案。 起初我有一个问题盖茨比构建,就像在这篇文章中一样:https://github.com/firebase/firebase-js-sdk/issues/2222,但我用自定义的 onCreateWebpackConfig 解决了它(您可以在下面找到它)。

堆: ——盖茨比 -Firebase(可能有错误)- 终极版

我还删除了 .cache 和 node_modules 并再次安装所有内容,但它不起作用。

Error:

There was an error compiling the html.js component for the development server.

See our docs page on debugging HTML builds for help https://gatsby.dev/debug-html ReferenceError: IDBIndex is not defined
]);
  86 | 
> 87 | proxyRequestMethods(Index, '_index', IDBIndex, [
     | ^
  88 |   'get',
  89 |   'getKey',
  90 |   'getAll',

  WebpackError: ReferenceError: IDBIndex is not defined

  - idb.mjs:87 Module../node_modules/idb/lib/idb.mjs
    node_modules/idb/lib/idb.mjs:87:1

  - index.esm.js:1 Module../node_modules/@firebase/installations/dist/index.esm.js
    node_modules/@firebase/installations/dist/index.esm.js:1:1

  - index.esm.js:1 Module../node_modules/@firebase/analytics/dist/index.esm.js
    node_modules/@firebase/analytics/dist/index.esm.js:1:1

  - index.esm.js:1 Module../node_modules/firebase/analytics/dist/index.esm.js
    node_modules/firebase/analytics/dist/index.esm.js:1:1

  - index.ts:1 Module../src/firebase/index.ts
    src/firebase/index.ts:1:1

  - index.esm.js:32 emit
    node_modules/@firebase/analytics/dist/index.esm.js:32:1

我的 gatsby-node 文件:

exports.onCreateWebpackConfig = ({ stage, actions, getConfig }) => {
  if (stage === 'build-html') {
    actions.setWebpackConfig({
      externals: getConfig().externals.concat(function(context, request, callback) {
        const regex = /^@?firebase(\/(.+))?/;
        if (regex.test(request)) {
          return callback(null, `umd ${request}`);
        }
        callback();
      }),
    });
  }
};

我的 firebase 依赖项:

 "@firebase/firestore-types": "^1.10.1",
 "firebase": "^7.13.1",
 "firebase-admin": "^8.10.0",
 "firebase-functions": "^3.5.0",
 "firebase-tools": "^7.16.1",

Firebase 索引文件:

import firebase from 'firebase/app';
import 'firebase/firestore';
import 'firebase/auth';
import 'firebase/storage';
import 'firebase/analytics';
const firebaseConfig = {...};
firebase.initializeApp(firebaseConfig);
export const firestore = firebase.firestore();
export const auth = firebase.auth();
export const storage = firebase.storage();

项目仓库: https://github.com/olafsulich/Projecty

在 Github 上发布问题:https://github.com/firebase/firebase-js-sdk/issues/2946

提前致谢。


以下代码片段仅适用于build由于您的状况(stage === 'build-html'):

   exports.onCreateWebpackConfig = ({ stage, actions, getConfig }) => {
      if (stage === 'build-html') {
        actions.setWebpackConfig({
          externals: getConfig().externals.concat(function(context, request, callback) {
            const regex = /^@?firebase(\/(.+))?/;
            if (regex.test(request)) {
              return callback(null, `umd ${request}`);
            }
            callback();
          }),
        });
      }
    };

删除它并像这样使用它:

   exports.onCreateWebpackConfig = ({ stage, actions, getConfig }) => {
        actions.setWebpackConfig({
          externals: getConfig().externals.concat(function(context, request, callback) {
            const regex = /^@?firebase(\/(.+))?/;
            if (regex.test(request)) {
              return callback(null, `umd ${request}`);
            }
            callback();
          }),
        });
    };

多谢!它只适用于盖茨比开发,但现在当我 想要构建项目,我收到错误 - TypeError: Cannot read 未定义的属性“concat”。你知道如何解决吗?

关于新问题,您可以按照以下解决方法进行操作:这个话题,这是 Gatsby 中的第三方模块在尝试访问 DOM 元素(通常window)在应用程序构建时尚未定义。所以,你需要等到window被定义为。您可以通过两种方式实现此目的:

  1. 使用如下条件实例化你的 firebase:

     import firebase from '@firebase/app';
     import '@firebase/auth';
     import '@firebase/firestore';
     import '@firebase/functions';
    
     const config = {
        ... firebase config here
     };
    
     let instance;
    
     export default function getFirebase() {
       if (typeof window !== 'undefined') {
         if (instance) return instance;
         instance = firebase.initializeApp(config);
         return instance;
       }
    
       return null;
     }
    

    请注意if (typeof window !== 'undefined')陈述

  2. 通过忽略 webpack 配置中的 firebase 模块,如所示他们的文档。在你的gatsby-node.js:

     exports.onCreateWebpackConfig = ({ stage, loaders, actions }) => {
       if (stage === "build-html") {
         actions.setWebpackConfig({
           module: {
             rules: [
               {
                 test: /bad-module/,
                 use: loaders.null(),
               },
             ],
           },
         })
       }
     }
    

    Replace bad module对于 firebase (或包/文件夹名称node_modules)。保留斜杠,因为test是正则表达式规则

    此代码片段替换了您之前的代码片段,该代码片段似乎在concat()功能。


对于那些想尝试的人concat()解决方案,这也会有帮助:

exports.onCreateWebpackConfig = ({ stage, actions, getConfig }) => {
  if (stage === 'build-html') {
    actions.setWebpackConfig({
      externals: getConfig().externals.concat((context, request, callback) => {
        const regex = /^@?firebase(\/(.+))?/
        // exclude firebase products from being bundled, so they will be loaded using require() at runtime.
        if (regex.test(request)) {
          return callback(null, `commonjs ${request}`) // <- use commonjs!
        }
        callback()
      }),
    })
  }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

GatsbyJS 与 Firebase - WebpackError:ReferenceError:IDBIndex 未定义 的相关文章

随机推荐

  • PHP 从 API 响应中获取 json 汇率值

    我正在使用货币层 JSON API 来获取实时货币转换值 有谁知道我如何获取这两个值 result 值和 quote 使用 PHP 从下面的 API 响应中获取值 我是 PHP 新手 我想知道是否可以将其存储在变量中 这是 JSON suc
  • 使用 R 中的 str_count 函数对多个模式进行计数

    对 R 相当陌生 并且在使用 R 时遇到了一些困难string count函数来检测多个未知且包含在单独向量中的单词 现在 我知道如何使用以下代码检测模式的单个实例 str count mydf string Apples 我想要做的是从本
  • 如何获取pivot_wider而不是列表中的总值总和?

    data lt data frame row id 0 19 Prediction c 4 20631885375613 0 677197140556434 0 889543113836738 37 8093227242093 105 86
  • Azure 服务结构实例计数

    我正在使用 azure 服务结构开发 POC 将我的服务部署在本地集群中 并且在 Local xml 中的默认设置下运行良好 当我更改实例计数时 它会抛出以下异常 更改实例计数的选项在哪里 基本上我现在正在尝试在两个节点上运行我的服务 当默
  • 使用正则表达式进行 Spark 过滤

    我试图将文件数据过滤为每个日期的好数据和坏数据 因此将得到 2 个结果文件 从测试文件中 前 4 行需要输入良好的数据 最后 2 行需要输入错误的数据 我有 2 个问题 我没有得到任何好的数据 结果文件为空 错误的数据结果如下所示 仅选取名
  • 没有 exec 的 fork,以及共享对象使用的 pthread_mutex_t

    我正在处理一个执行以下操作的网络服务器项目fork没有exec 该程序依赖于OpenSSL 而OpenSSL需要一定数量的锁 CRYPTO NUM LOCKS准确地说 目前约为40 锁通常是pthread mutex t在 Linux 上
  • 在 bash 脚本中使用 screen

    我正在远程服务器上运行游戏服务器 我使用独立的屏幕实例使其保持运行 我现在正在创建一个脚本 可用于关闭服务器 备份所有重要文件并再次启动它 但是我在处理屏幕时遇到了一些困难 我假设我可以通过在脚本中调用 screen r 来切换到脚本中的分
  • LINQ 按日期降序对对象集合进行排序

    我有一堆对象 产品 我想先按创建日期降序对它们进行排序 然后只显示前 10 条记录 创建日期 DateTime 的格式如下 4 4 2007 12 00 00 AM 这是我尝试过的 如何按日期降序排列前 10 名 var productLa
  • 将带有复合键/外键的表映射到该表

    我正在尝试映射具有组合键的表并映射引用该表的另一个表 假设这些表 ITEMDELIVERY with relevant columns ITEMDELIVERY ID DELIVERY DATE ITEMDELIVERYDETAIL wit
  • jQuery 中的 jQuery() 函数有什么作用?

    In 这个视频有一段代码是这样的 if jQuery jQuery function 我从未见过jQuery 之前的函数 话又说回来 我不是一个精明的 jQuery 用户 它有什么作用 它是默认随 jQuery 一起发布还是特定于IxEdi
  • 在 Android SDK 管理器中找不到支持包

    我需要支持包 jar 文件 我打开了页面http developer android com sdk compatibility library html Downloading并按照他们所说的去做 启动 SDK 和 AVD 管理器 在 E
  • 无法使用状态值作为子组件的 props

    在我的 React js 应用程序中 我似乎无法使用状态值作为子组件的道具 在父组件中 constructor 应用程序有一个称为空状态selectedWarehouseID 这种状态 selectedWarehouseID 应该更新一些信
  • 如何打开特定相册或文件夹的默认图库应用程序?

    我在网上找到的每个例子都是打开图库并从图库中获取图像作为结果 我的需要是我不想将结果或图像添加到我的应用程序中 我只想触发图库应用程序来显示特定的图像文件夹 我的应用程序有单独的文件夹来保存图像 我需要将用户直接导航到该路径 试试这个代码
  • 在 Jscript 中获取给定用户的特殊文件夹路径

    如何获取当前用户以外的特定用户的 shell 文件夹 例如 本地设置 或 本地应用程序数据 的路径 虽然有一些方法可以在 Windows Script Host 中获取特殊文件夹路径 WshShell SpecialFolders and
  • odeint 简单一维 ode 示例无法编译

    我试着跑指定示例在 Debian Squeeze g 4 4 上的 boost 1 54 0 中 洛伦兹系统工作正常 但是简单的一维颂歌 include
  • VB.Net默认表单实例

    我已替换 正则表达式 所有对默认表单实例在我的项目中 我现在想确保我不再使用默认实例 似乎默认实例功能无法禁用 不改变类的ctor 任何人都知道如何在 VB Net 中查找默认表单实例的所有用法 或者 使用类名访问非共享成员 仅供参考 我正
  • 使用 python Flask 从数据库中删除行?

    我正在使用 Flask 框架 似乎无法从数据库中删除行 下面的代码给出了 405 错误 所请求的 URL 不允许使用该方法 有任何想法吗 在py中 app route delete
  • 如何在 jquery 中包含 !important

    我正在尝试使用 jQuery 在 css 属性中添加 important tabs css height 650px important 但是 important 没有效果 如何在 jquery 中包含 important 显然可以在 jQ
  • 运算符重载:无法添加两个指针

    我创建了一个 Fraction 类 它具有用于在两个 Fraction 对象之间进行加 减 乘和除的成员函数以及所需的默认构造函数和复制构造函数 对于这个问题 我必须使用指针 不能使用向量 因为只有用户选择才能创建 Fraction 对象
  • GatsbyJS 与 Firebase - WebpackError:ReferenceError:IDBIndex 未定义

    我收到错误盖茨比发展 它与这个非常相似 https github com firebase firebase js sdk issues 2222 但我收到错误盖茨比发展 而不是盖茨比构建 我做了很多研究 但找不到有效的解决方案 起初我有一