从Web SDK迁移到模块化SDK后出现@firebase/auth内部断言错误
解决AngularFire模块化迁移后的INTERNAL ASSERTION FAILED错误
针对你把Firebase从Web SDK切换到模块化SDK后出现的INTERNAL ASSERTION FAILED: Expected a class definition错误,以下是经过验证的修复步骤:
1. 修复依赖版本兼容性
虽然@angular/fire 7.6.1和firebase 9.23.0标称兼容,但实际可能存在版本适配细节问题,建议锁定匹配的稳定版本:
- 先卸载现有依赖:
npm uninstall firebase @angular/fire - 重新安装指定版本:
npm install @angular/fire@7.6.1 firebase@9.22.0
2. 修正AngularFire初始化配置
确保项目的初始化代码完全采用模块化语法,摒弃旧版Web SDK的写法:
- 正确的初始化示例(在
app.module.ts或独立组件的providers中):import { provideFirebaseApp, initializeApp } from '@angular/fire/app'; import { getAuth, provideAuth } from '@angular/fire/auth'; import { getFirestore, provideFirestore } from '@angular/fire/firestore'; import { environment } from '../environments/environment'; @NgModule({ imports: [ provideFirebaseApp(() => initializeApp(environment.firebaseConfig)), provideAuth(() => getAuth()), provideFirestore(() => getFirestore()) // 其他Firebase服务同理 ] }) export class AppModule { } - 注意:不要使用旧版的
AngularFireModule.initializeApp(),这是导致冲突的常见原因。
3. 清理缓存并重建项目
编译缓存可能残留旧版SDK的代码,引发冲突:
- 清理依赖和锁文件:
rm -rf node_modules package-lock.json npm install - 清理Angular构建缓存:
ng cache clean - 重新构建并启动项目:
ionic build ionic serve --no-open
4. 排查隐藏的compat导入
检查项目中是否有第三方库或自定义代码偷偷导入了firebase/compat模块,这会导致新旧SDK冲突:
- 全局搜索项目文件:
grep -r "compat" src/ - 如果找到相关导入,替换为模块化的对应API。
5. 修正Auth服务的调用方式
确保所有Auth相关操作都使用模块化语法,避免混用旧版AngularFireAuth:
- 正确的模块化调用示例:
import { Auth, signInWithEmailAndPassword, user } from '@angular/fire/auth'; import { Observable } from 'rxjs'; constructor(private auth: Auth) {} // 获取当前用户的Observable getCurrentUser(): Observable<any> { return user(this.auth); } // 邮箱密码登录 async login(email: string, password: string) { try { await signInWithEmailAndPassword(this.auth, email, password); } catch (err) { console.error(err); } }
内容的提问来源于stack exchange,提问作者Dodo mui
相关产品推荐
相关产品推荐

