由于 Firebase 的 IDBIndex 错误,无法提供服务器呈现的应用程序

Posted

技术标签:

【中文标题】由于 Firebase 的 IDBIndex 错误,无法提供服务器呈现的应用程序【英文标题】:Unable to serve server rendered app due to Firebase's IDBIndex error 【发布时间】:2019-10-05 16:28:14 【问题描述】:

我的环境

操作系统版本:Windows 10 Firebase SDK 版本:6.0.2

问题

我按照this 教程创建了服务器端呈现的应用程序。当我尝试使用 npm run serve:s-s-r 为应用程序提供服务时发生错误。

我得到的错误是:

proxyRequestMethods(Index, '_index', IDBIndex, [
                                     ^

ReferenceError: IDBIndex is not defined
    at Module.<anonymous> (C:\Users\eg\dist\server.js:343794:38)
    at __webpack_require__ (C:\Users\eg\dist\server.js:30:30)
    at Module.<anonymous> (C:\Users\eg\dist\server.js:342436:61)
    at __webpack_require__ (C:\Users\eg\dist\server.js:30:30)
    at Module.<anonymous> (C:\Users\eg\dist\server.js:341227:81)
    at __webpack_require__ (C:\Users\eg\dist\server.js:30:30)
    at Module.<anonymous> (C:\Users\eg\dist\server.js:332069:79)
    at __webpack_require__ (C:\Users\eg\dist\server.js:30:30)
    at Object.firebase (C:\Users\eg\dist\server.js:189647:18)
    at __webpack_require__ (C:\Users\eg\dist\server.js:137349:30)

在此之前我收到了一个错误window is not defined,所以我在server.ts 中添加了以下代码,如this comment 中所述

const domino = require('domino');
const fs = require('fs');
const path = require('path');
const template = fs.readFileSync(path.join(__dirname, '.', 'dist', 'index.html')).toString();
const win = domino.createWindow(template);
global['window'] = win;
global['document'] = win.document;

当我使用 npm run build:s-s-r 构建 s-s-r 应用程序时,我收到如下所示的警告

WARNING in ./node_modules/@angular/fire/firestore/firestore.js 23:21-32
"export 'SDK_VERSION' was not found in 'firebase/app'
 @ ./node_modules/@angular/fire/firestore/public_api.js
 @ ./node_modules/@angular/fire/firestore/index.js
 @ ./dist/server/main.js
 @ ./server.ts

WARNING in ./node_modules/@angular/fire/firestore/firestore.js 24:21-32
"export 'SDK_VERSION' was not found in 'firebase/app'
 @ ./node_modules/@angular/fire/firestore/public_api.js
 @ ./node_modules/@angular/fire/firestore/index.js
 @ ./dist/server/main.js
 @ ./server.ts

另外,当我使用npm run serve:s-s-r 服务(d) 应用程序时,当我使用firebase@5.x.x 时收到这些警告,我在更新到firebase@6.0.2 后收到错误reference: self is not defined 我收到错误

var major = parseInt(firebase_app__WEBPACK_IMPORTED_MODULE_6__["SDK_VERSION"].split('.')[0]);
TypeError: Cannot read property 'split' of undefined
    at Module.<anonymous> (C:\Users\eg\dist\server.js:279474:79)
    at __webpack_require__ (C:\Users\eg\dist\server.js:30:30)
    at Module.<anonymous> (C:\Users\eg\dist\server.js:279385:68)
    at __webpack_require__ (C:\Users\eg\dist\server.js:30:30)
    at Module.<anonymous> (C:\Users\eg\dist\server.js:279341:69)
    at __webpack_require__ (C:\Users\eg\dist\server.js:30:30)
    at Object.@angular/fire/firestore (C:\Users\eg\dist\server.js:189255:18)
    at __webpack_require__ (C:\Users\eg\dist\server.js:137353:30)
    at Object../src/app/services/global-manager.service.ts (C:\Users\eg\dist\server.js:186535:19)
    at __webpack_require__ (C:\Users\eg\dist\server.js:137353:30)

我通过在下面添加行来更新webpack.server.config.js 来删除这些警告和错误

  const regex = /firebase\/(app|firestore)/;
module.exports=
externals: [/node_modules/, function(context, request, callback) 

    // exclude firebase products from being bundled, so they will be loaded using require() at runtime.
    if(regex.test(request)) 
      return callback(null, 'commonjs ' + request);
    
    callback();
  ],
...

我还发现了与此错误相关的 this*** 问题,但我不使用性能模块,因此解决方案不适用于我。

我该如何解决这个IDBIndex 错误?请帮忙

【问题讨论】:

也遇到这个问题,找到解决办法了吗? 我无法找到解决此问题的方法。 我要赏金了 【参考方案1】:

已在here 上评论了为什么会发生这种情况的详细解释。 他们提供了一种解决方法,但也会有修复。

【讨论】:

以上是关于由于 Firebase 的 IDBIndex 错误,无法提供服务器呈现的应用程序的主要内容,如果未能解决你的问题,请参考以下文章

由于权限错误,无法部署 Firebase 云功能

ld:由于残留的 Firebase 组件,未找到框架 FirebaseAuth 错误

由于未捕获的异常“FirebaseShutdown”而终止应用程序,原因:“Firebase 错误

由于 EAI_AGAIN 到 identitytoolkit.googleapis.com 导致 Firebase 云函数错误

Firebase Jobdispatcher:由于错误而无休止运行的作业永远不会再次安排

由于 12500(SIGN_IN_FAILED) 错误代码,使用 Google 登录 Firebase UI 失败