Nuxt.js SSR with firebase - ReferenceError: navigator is not



我用next (SSR)和firebase(firestore和hosting)制作了一个简单的web应用程序。它有一些页面,如索引,关于,联系和文本编辑器。
当我做npm run build时,它工作没有问题。但是对于npm run generate,它有一个错误消息,如:

ReferenceError: navigator is not defined
at Object.areCookiesEnabled (C:appnode_modules@firebaseutildistindex.node.cjs.js:656:5)
at warnOnBrowserContextMismatch (C:appnode_modules@firebaseanalyticsdistindex.cjs.js:1072:15)
at factory (C:appnode_modules@firebaseanalyticsdistindex.cjs.js:1086:5)
at Component.instance.INTERNAL.registerComponent.component.Component.setServiceProps.settings [as instanceFactory] (C:appnode_modules@firebaseanalyticsdistindex.cjs.js:1165:16)
at Provider.getOrInitializeService (C:appnode_modules@firebasecomponentdistindex.cjs.js:222:39)
at Provider.getImmediate (C:appnode_modules@firebasecomponentdistindex.cjs.js:120:33)
at FirebaseAppImpl._getService (C:appnode_modules@firebaseappdistindex.node.cjs.js:230:49)
at FirebaseAppImpl.firebaseAppImpl.<computed> [as analytics] (C:appnode_modules@firebaseappdistindex.node.cjs.js:442:39)
at Object.serviceNamespace [as analytics] (C:appnode_modules@firebaseappdistindex.node.cjs.js:422:45)
at Object.<anonymous> (plugins/firebase.js:22:0)
at __webpack_require__ (webpack/bootstrap:25:0)
at Module.<anonymous> (server.js:2766:16)
at __webpack_require__ (webpack/bootstrap:25:0)
at Object.<anonymous> (server.js:639:18)
at __webpack_require__ (webpack/bootstrap:25:0)
at server.js:118:18

当我在开发模式下运行应用程序时,这个消息实际上偶尔会出现,当我刷新时它通常会消失。下面是我的修复方法:

  1. 删除node_module文件夹和我最终在package中不使用的依赖项。重新导入"npm install"文件。我甚至删除了与firebase相关的文件和文件夹,重新安装了firebase工具并重新启动。
  2. 一开始,错误信息只出现在/about页面,其他页面都是正确的,所以我删除了about页面,然后错误再次出现在另一个页面。
  3. 在#2之前,我认为这个错误发生是因为只有关于页面没有。我做了一些研究,发现这是因为页面仅限客户端或仅限服务器端等等……所以我故意添加了一些脚本代码,但它也不起作用。

我在这里或其他论坛上查阅了几十篇文章,但没有一篇能帮助我找出我做错了什么。
这个问题似乎与节点或服务器端的事情有关,但我对Vue和node都很陌生,所以我不能完全理解我必须做什么以及我应该在哪里修改代码。
顺便说一句,我的节点是最新的LTS版本,vue、next和所有依赖项也是最新的版本。
提前感谢。

他们不知道这是否有帮助,我在使用NextJs时遇到了同样的问题。我是这样解决的。我也没有在任何SSR代码中使用它,所以我不知道发生了什么。

const analytics = (): firebase.analytics.Analytics => firebase.analytics();

然后在你的代码中使用

analytics().logEvent();

最新更新