NextJS:如何正确地将 firebase 分析添加到 NextJS 应用程序

Dar*_*ong 13 javascript reactjs vue.js next.js google-cloud-firestore

我有一个 React/nextjs 应用程序,并且有 firebase.js,如下所示:

import firebase from 'firebase/app'
import 'firebase/auth'
import 'firebase/analytics'
import 'firebase/firestore'

const firebaseConfig = {
  apiKey: '...'
}
try {
  firebase.initializeApp(firebaseConfig)
  firebase.analytics()
} catch (err) {
  if (!/already exists/.test(err.message)) {
    console.error('Firebase initialization error', err.stack)
  }
}

export default firebase
Run Code Online (Sandbox Code Playgroud)

我不断得到

Firebase初始化错误ReferenceError:导航器未定义

将分析添加到 firebase.js 文件后。将分析添加到应用程序的正确方法是什么?

小智 35

import { getAnalytics, isSupported } from "firebase/analytics";

const analytics = isSupported().then(yes => yes ? getAnalytics(app) : null);

Run Code Online (Sandbox Code Playgroud)


小智 6

试试这个

import firebase from "firebase/app"
import "firebase/auth"
import "firebase/firestore"
import "firebase/storage"
import "firebase/analytics"

const firebaseConfig = {
  apiKey: process.env.NEXT_PUBLIC_API_KEY,
  authDomain: process.env.NEXT_PUBLIC_AUTH_DOMAIN,
  projectId: process.env.NEXT_PUBLIC_PROJECT_ID,
  appId: process.env.NEXT_PUBLIC_APP_ID,
  storageBucket: process.env.NEXT_PUBLIC_STORAGE_BUCKET,
  messagingSenderId: process.env.NEXT_PUBLIC_MESSAGING_SENDER_ID,
  measurementId: process.env.NEXT_PUBLIC_MEASUREMENT_ID,
}
if (!firebase.apps.length) {
  firebase.initializeApp(firebaseConfig)
}

// Auth export
export const auth = firebase.auth()

// Firestore exports
export const firestore = firebase.firestore()
export const serverTimestamp = firebase.firestore.FieldValue.serverTimestamp
export const fbTimestamp = firebase.firestore.Timestamp
export const fromMillis = firebase.firestore.Timestamp.fromMillis
export const increment = firebase.firestore.FieldValue.increment

// Storage exports
export const storage = firebase.storage()

export const analytics = () => {
  if (typeof window !== "undefined") {
    return firebase.analytics()
  } else {
    return null
  }
}
export default firebase
Run Code Online (Sandbox Code Playgroud)


小智 1

ReferenceError: navigator is not defined 因为在 Nextjs 应用程序的服务器端渲染期间不存在窗口对象。

尝试:

if(typeof window != undefined){
     firebase.analytics()
}
Run Code Online (Sandbox Code Playgroud)

  • 我刚刚尝试了这个,仍然收到错误。 (3认同)