gpt4 book ai didi

firebase - 带有 Firebase 的 GatsbyJS - WebpackError : ReferenceError: IDBIndex is not defined

转载 作者:行者123 更新时间:2023-12-05 09:10:30 31 4
gpt4 key购买 nike

我收到 gatsby develop 错误。它与这个非常相似:https://github.com/firebase/firebase-js-sdk/issues/2222 ,但我收到了 gatsby develop 的错误,而 gatsby build 没有。我做了很多研究,但找不到可行的解决方案。起初我遇到了 gatsby build 的问题,就像在这篇文章中:https://github.com/firebase/firebase-js-sdk/issues/2222 ,但我使用自定义 onCreateWebpackConfig 解决了它(您可以在下面找到它)。

堆栈:- Gatsby - Firebase(可能有错误)- 终极版

我也删除了 .cache 和 node_modules 并重新安装了所有东西,但是没有用。

错误:

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();

项目 repo :https://github.com/olafsulich/Projecty

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

提前致谢。

最佳答案

由于您的条件 (stage === 'build-html'),以下代码片段仅适用于 build 环境:

   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();
}),
});
};

Thank's a lot! It's working only on gatbsy develop, but now when Iwant to build project, I get an error - TypeError: Cannot readproperty 'concat' of undefined. You know how to solve it?

关于新问题,您可以按照 this topic 中的解决方法进行操作, 这是 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 模块,如显示 their docs .在你的 gatsby-node.js 中:

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

    为 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()
}),
})
}
}

关于firebase - 带有 Firebase 的 GatsbyJS - WebpackError : ReferenceError: IDBIndex is not defined,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61334290/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com