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

React-Native Firebase Auth报undefined is not an object错误

问题现象

React Native项目配置Firebase邮箱密码登录功能时,点击绑定submitHandler的提交按钮后持续抛出如下错误:

TypeError: undefined is not an object (evaluating '_$$_REQUIRE(_dependencyMap[6], "@react-native-firebase/auth").auth')

经自行排查,问题与导入语句import auth from '@react-native-firebase/auth';直接相关:代码保留该导入时页面渲染为空白,移除该导入后应用可正常运行。开发设备为M1芯片MacBook,此前曾遇到过环境兼容类问题,以下为问题项目App.js完整代码:

// In App.js in a new project

import React, {useState} from 'react';
import { View, Text, TextInput, TouchableOpacity } from 'react-native';
import { NavigationContainer } from '@react-navigation/native';
import { createNativeStackNavigator } from '@react-navigation/native-stack';
import ItemMenu from './src/components/ItemMenu';
import auth from '@react-native-firebase/auth';

function HomeScreen() {
  return (
    <View style={{ flex: 1, alignItems: 'center', justifyContent: 'center' }}>
      <Text>Home Screen</Text>
    </View>
  );
}

const Stack = createNativeStackNavigator();

function App() {
const [email,setEmail] = useState(" ");
const [password,setPassword] = useState(" ");

  const submitHandler = () => {
    auth()
    .createUserWithEmailAndPassword(email, password)
    .then(() => {
      alert('User account created & signed in!');
    })
    .catch(error => {
      if (error.code === 'auth/email-already-in-use') {
        console.log('That email address is already in use!');
      }

      if (error.code === 'auth/invalid-email') {
        console.log('That email address is invalid!');
      }

      console.error(error);
    });
  }

  return (
    <NavigationContainer>
      <View style={{paddingTop:50}}>
      <TextInput
      textContentType='email'
      placeholder='email:'
      onChangeText={text => setEmail(text)}
      />
      <TextInput
      textContentType='password'
      placeholder='password:'
      onChangeText={text => setPassword(text)}
      />
      </View>
      <TouchableOpacity
      onPress={submitHandler}
      style={{backgroundColor:"red",width:200,height:20}}
      />
    </NavigationContainer>
  );
}

export default App;
排查方向与解决方案

该报错核心原因是@react-native-firebase/auth模块在JS侧加载时值为undefined,结合M1芯片开发环境的常见问题,按以下优先级排查即可:

  • 原生依赖未完成完整安装与链接
    @react-native-firebase/auth是包含原生iOS/Android代码的依赖,并非纯JS包,安装后必须完成原生侧编译链接才能正常导入,M1芯片环境下极易出现安装、链接流程异常:
    1. 彻底关闭当前Metro服务、模拟器/真机上运行的调试应用
    2. 项目根目录执行依赖重装:
      rm -rf node_modules yarn.lock package-lock.json
      # 用项目实际使用的包管理器执行安装,二选一即可
      npm install
      # yarn install
      
    3. iOS端单独处理(M1芯片必做):
      进入ios目录执行pod安装,若出现架构兼容报错,在终端开启Rosetta模式,或在pod命令前加架构前缀执行:
      cd ios
      arch -x86_64 pod install --repo-update
      
    4. 所有依赖安装完成后,必须冷启动重新编译原生项目,不要使用热重载:
      # iOS
      npx react-native run-ios
      # Android
      npx react-native run-android
      
  • Firebase核心依赖缺失或初始化未完成
    React Native Firebase所有功能模块都依赖核心包@react-native-firebase/app,仅安装auth模块、未安装核心包或未完成原生配置时,会直接导致auth模块导入为undefined:
    1. 安装核心依赖:
      npm install @react-native-firebase/app
      
    2. 核对原生配置:确认Android端google-services.json已放置到android/app目录、iOS端GoogleService-Info.plist已正确导入Xcode项目,且对应build.gradle、AppDelegate等原生配置修改已全部完成。
  • 导入写法兼容问题
    部分版本的RN Firebase模块默认导出规则存在差异,可尝试替换导入写法验证:
    // 替换原有的auth导入语句
    import { getAuth, createUserWithEmailAndPassword } from '@react-native-firebase/auth';
    const auth = getAuth();
    
    对应修改submitHandler内的调用逻辑,去掉auth()的函数调用即可。
  • 构建缓存清理
    M1环境下Metro、原生构建缓存极易导致依赖加载异常,重装依赖后可执行全量缓存清理:
    1. 清理Metro缓存:npx react-native start --reset-cache
    2. Android端清理构建缓存:进入android目录执行./gradlew clean
    3. iOS端可删除~/Library/Developer/Xcode/DerivedData目录下对应项目的缓存文件后重新编译。

额外提示:当前代码中email、password的state初始值为带空格的字符串" ",会导致首次提交时传入参数带多余空格,建议将初始值改为空字符串"",避免触发无效邮箱、弱密码的误报错。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 04:09:25