Невозможно обслужить приложение, отображаемое на сервере, из-за ошибки Firebase IDBIndex

Моя среда

  • Версия операционной системы: Windows 10
  • Версия Firebase SDK: 6.0.2

Проблема

Я следовал этому руководству по созданию приложения с рендерингом на стороне сервера. Ошибка возникает, когда я пытаюсь обслужить приложение с помощью npm run serve:ssr.

Я получаю следующую ошибку:

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, как указано в этот комментарий

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;

Когда я создаю приложение ssr с использованием npm run build:ssr, я получаю предупреждения, показанные ниже

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

Также, когда я обслуживаю приложение (d), используя npm run serve:ssr, в то время как я получаю эти предупреждения, когда я использовал [email protected], я получил ошибку reference: self is not defined после обновления до [email protected] я получаю ошибку

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

Я также обнаружил этот вопрос о переполнении стека, связанный с этим ошибка, но я не использую модуль производительности, поэтому решение мне не подходит.

Как я могу решить эту IDBIndex ошибку? Пожалуйста помоги


person Kartik Watwani    schedule 18.05.2019    source источник
comment
Также возникла эта проблема, нашли какое-либо решение?   -  person raberana    schedule 01.06.2019
comment
Мне не удалось найти решение этой проблемы.   -  person Kartik Watwani    schedule 01.06.2019
comment
Я назначаю награду за это   -  person raberana    schedule 02.06.2019


Ответы (1)


Подробное объяснение того, почему это происходит, было прокомментировано здесь. Они предоставили обходной путь, но исправление также будет.

person raberana    schedule 06.06.2019