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

MERN+Firebase项目报Maximum call stack size exceeded错误如何解决

问题根因及修复方案

1. 配置导入错误(直接触发栈溢出)

你代码中的核心错误是将整个Firebase SDK模块当成了配置对象传入初始化方法:

// 错误写法
import firebaseKeys from 'firebase';
firebase.initializeApp(firebaseKeys);

你传入的firebaseKeys本质是完整的Firebase SDK对象,内部存在大量循环引用,初始化方法执行深拷贝时递归遍历直接触发Maximum call stack size exceeded和deepExtend相关报错。
修复步骤:

  • 新建独立的Firebase配置文件,例如src/utils/firebaseConfig.js,填入你从Firebase控制台获取的项目配置:
// src/utils/firebaseConfig.js
import firebase from 'firebase/app';
import 'firebase/firestore';
import 'firebase/storage';

// 替换为你自己的Firebase项目配置
const firebaseConfig = {
  apiKey: "xxx",
  authDomain: "xxx",
  projectId: "xxx",
  storageBucket: "xxx",
  messagingSenderId: "xxx",
  appId: "xxx"
};

// 避免重复初始化
if (!firebase.apps.length) {
  firebase.initializeApp(firebaseConfig);
}

// 直接导出初始化完成的实例
export const firestore = firebase.firestore();
export const storage = firebase.storage();

2. 冗余代码清理

删除ProductScreen.js中以下冗余代码:

  • 所有Firebase相关导入
  • 错误的firebaseKeys导入
  • 未使用的FireStoreStuff组件
  • 注释掉的旧初始化代码
    仅保留从配置文件导入storage的语句:
// ProductScreen.js 顶部添加
import { storage } from '../utils/firebaseConfig';

3. 上传逻辑修复

你原有上传代码中存在语法错误,storage调用缺少括号,直接使用导入的实例修改即可:

async function uploadFile() {
  console.log('starting UPLOAD ========');
  const blob = await fetch(mediaBlobUrl).then((r) => r.blob());
  const path = '/recordings/one';
  await storage.ref(path).put(blob);
  const url = await storage.ref(path).getDownloadURL();
  setURL(url);
  console.log('Uploaded complete');
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 13:21:03