You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Next.js使用Firebase报Cannot read property 'length' of undefined如何解决

问题修复方案

核心原因

你安装的依赖是firebase@9.x版本,该版本采用了模块化的API设计,完全不兼容Firebase 8及更早版本的命名空间调用语法。你当前的配置文件使用的是v8版本的写法,读取firebase.apps时会返回undefined,调用length属性就会触发本次报错。同时你还缺少storage模块的导入定义,后续调用storage也会触发额外报错。

修复方案1:兼容模式(无需修改后续业务代码,适配v8写法)

直接修改firebase配置文件的导入语句,使用v9版本提供的兼容包即可,完整代码如下:

import firebase from "firebase/compat/app";
import "firebase/compat/firestore";
// 补充storage的兼容导入
import "firebase/compat/storage";

const firebaseConfig = {
  apiKey: "AIzaSyD0Kz7iRs6WKSXO6Iw2hEeDFeRcDGERmV8",
  authDomain: "facebook-clone-1870b.firebaseapp.com",
  projectId: "facebook-clone-1870b",
  storageBucket: "facebook-clone-1870b.appspot.com",
  messagingSenderId: "924586129038",
  appId: "1:924586129038:web:1d4204813a4956bd353bdf"
};

const app = !firebase.apps.length
    ? firebase.initializeApp(firebaseConfig)
    : firebase.app();

const db = app.firestore();
const storage = firebase.storage();

export  {db,storage};

修复方案2:原生模块化写法(推荐,打包体积更小性能更好)

完全适配Firebase 9的模块化API,修改配置文件如下:

import { initializeApp, getApps, getApp } from "firebase/app";
import { getFirestore } from "firebase/firestore";
import { getStorage } from "firebase/storage";

const firebaseConfig = {
  apiKey: "AIzaSyD0Kz7iRs6WKSXO6Iw2hEeDFeRcDGERmV8",
  authDomain: "facebook-clone-1870b.firebaseapp.com",
  projectId: "facebook-clone-1870b",
  storageBucket: "facebook-clone-1870b.appspot.com",
  messagingSenderId: "924586129038",
  appId: "1:924586129038:web:1d4204813a4956bd353bdf"
};

const app = getApps().length === 0 ? initializeApp(firebaseConfig) : getApp();
const db = getFirestore(app);
const storage = getStorage(app);

export { db, storage };

注意:采用原生v9写法后,后续调用Firestore、Storage的业务代码也需要同步改为模块化调用语法,不能再使用v8的链式调用写法。


内容的提问来源于stack exchange,提问作者Jeevan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 12:09:03