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芯片环境下极易出现安装、链接流程异常:- 彻底关闭当前Metro服务、模拟器/真机上运行的调试应用
- 项目根目录执行依赖重装:
rm -rf node_modules yarn.lock package-lock.json # 用项目实际使用的包管理器执行安装,二选一即可 npm install # yarn install - iOS端单独处理(M1芯片必做):
进入ios目录执行pod安装,若出现架构兼容报错,在终端开启Rosetta模式,或在pod命令前加架构前缀执行:cd ios arch -x86_64 pod install --repo-update - 所有依赖安装完成后,必须冷启动重新编译原生项目,不要使用热重载:
# iOS npx react-native run-ios # Android npx react-native run-android
- Firebase核心依赖缺失或初始化未完成
React Native Firebase所有功能模块都依赖核心包@react-native-firebase/app,仅安装auth模块、未安装核心包或未完成原生配置时,会直接导致auth模块导入为undefined:- 安装核心依赖:
npm install @react-native-firebase/app - 核对原生配置:确认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、原生构建缓存极易导致依赖加载异常,重装依赖后可执行全量缓存清理:- 清理Metro缓存:
npx react-native start --reset-cache - Android端清理构建缓存:进入
android目录执行./gradlew clean - iOS端可删除
~/Library/Developer/Xcode/DerivedData目录下对应项目的缓存文件后重新编译。
- 清理Metro缓存:
额外提示:当前代码中email、password的state初始值为带空格的字符串" ",会导致首次提交时传入参数带多余空格,建议将初始值改为空字符串"",避免触发无效邮箱、弱密码的误报错。
内容的提问来源于stack exchange,提问作者Nero
相关产品推荐
相关产品推荐

