3

我正在尝试在使用https://github.com/jaredpalmer/razzle with-react-router-3 创建的 SSR 应用程序中使用 firebase 按摩。我已经在使用 firebase,它非常好用,包括托管。但是当我开始在应用程序中添加消息时开始抛出错误。

我的入口点看起来像,

import firebase from 'firebase/app';
import 'firebase/auth';
import 'firebase/database';
import 'firebase/storage';
import 'firebase/firestore';
import 'firebase/messaging';

import FirebaseConfig from 'config/firebase-config.json';
if (!firebase.apps.length) {
  firebase.initializeApp(FirebaseConfig);
}
const messaging = firebase.messaging();

当我启动服务器时出现以下错误razzle start

/Users/subkundu/Desktop/Work/Projects/React/ownerstown/node_modules/@firebase/messaging/index.ts:75
  if (self && 'ServiceWorkerGlobalScope' in self) {
  ^

ReferenceError: self is not defined

我如何解决它?任何领先都会令人惊叹。谢谢。:)

4

1 回答 1

6

我相信您必须提供检查以查看是否window可用。

let Messaging;
if (YOUR_CHECK_HERE) {
    Messaging = firebase.messaging();
}
// Then you can use "Messaging"

我不熟悉 razzle。访问window因服务器端渲染 (SSR) 框架而异。我从这篇文章中得到了这个想法。当我使用 nuxt.js 遇到这个问题时,我能够window使用 this进行检查process.browser。希望这可以帮助!

于 2019-09-17T07:53:16.273 回答