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

Angular 17与AngularFire 17独立模式注入令牌缺失错误求助

Angular 17 独立模式下 AngularFire 依赖注入错误解决

问题背景

不熟悉Angular 17默认的无app.module.ts独立模式,在使用AngularFire时遇到依赖注入错误,提示找不到InjectionToken angularfire2.app.options的提供者。

当前配置代码

app.config.ts

export const appConfig: ApplicationConfig = {
  providers: [
    provideRouter(routes), 
    provideAnimations(), 
    importProvidersFrom(provideFirebaseApp(() => initializeApp(environment.firebase))),  
    importProvidersFrom(provideAuth(() => getAuth())), 
    importProvidersFrom(provideAnalytics(() => getAnalytics())), 
    ScreenTrackingService, UserTrackingService, 
    importProvidersFrom(provideFirestore(() => getFirestore())), 
    importProvidersFrom(provideStorage(() => getStorage())),
    importProvidersFrom(AngularFireModule),
    importProvidersFrom(AngularFireAuthModule),
    importProvidersFrom(AngularFirestoreModule),
    importProvidersFrom(AngularFireStorageModule),
    importProvidersFrom(AngularFireDatabaseModule),
  ]
};

auth.service.ts

import { Injectable, NgZone, isDevMode } from '@angular/core';
import { User } from '../services/user';
import * as auth from 'firebase/auth';
import { AngularFireAuth } from '@angular/fire/compat/auth';
import {
  AngularFirestore,
  AngularFirestoreDocument,
} from '@angular/fire/compat/firestore';
import { Router } from '@angular/router';

@Injectable({
  providedIn: 'root'
})

export class AuthService {
  userData: any; 
  constructor(
    public afs: AngularFirestore, 
    public afAuth: AngularFireAuth,
    public router: Router,
    public ngZone: NgZone    
  ) {
    // ... 服务逻辑
  }
}

组件使用代码

export class SignupComponent {
  
  constructor(
    public authService: AuthService
  ) { }
}

错误信息

ERROR – NullInjectorError: R3InjectorError(Standalone[_AppComponent])[_AuthService -> _AuthService -> _AngularFirestore -> InjectionToken angularfire2.app.options -> InjectionToken angularfire2.app.options]: 
  NullInjectorError: No provider for InjectionToken angularfire2.app.options!
NullInjectorError: R3InjectorError(Standalone[_AppComponent])[_AuthService -> _AuthService -> _AngularFirestore -> InjectionToken angularfire2.app.options -> InjectionToken angularfire2.app.options]: 

package.json 依赖版本

"dependencies": {
  "@angular/animations": "^17.0.0",
  "@angular/common": "^17.0.0",
  "@angular/compiler": "^17.0.0",
  "@angular/core": "^17.0.0",
  "@angular/fire": "^17.0.1",
  "@angular/forms": "^17.0.0",
  "@angular/platform-browser": "^17.0.0",
  "@angular/platform-browser-dynamic": "^17.0.0",
  "@angular/platform-server": "^17.0.0",
  "@angular/router": "^17.0.0",
  "@angular/ssr": "^17.0.9",
  "express": "^4.18.2",
  "firebase": "^10.7.1",
  "rxjs": "~7.8.0",
  "tslib": "^2.3.0",
  "zone.js": "~0.14.2"
},

解决方案

问题核心是混用了AngularFire新独立模式API和旧兼容模块,导致配置冲突:旧compat模块需要通过AngularFireModule.initializeApp()提供配置,而你仅用新的provideFirebaseApp初始化,但未给旧模块传入配置,因此出现找不到angularfire2.app.options的错误。

修正方案二选一:

方案1:继续使用旧compat模块(适配现有代码)

修改app.config.ts,将单独的importProvidersFrom(AngularFireModule)替换为带初始化配置的版本:

// 移除这一行
// importProvidersFrom(AngularFireModule),
// 替换为
importProvidersFrom(AngularFireModule.initializeApp(environment.firebase)),

其余旧模块的importProvidersFrom保留,确保compat模块能获取到Firebase配置。

方案2:迁移到AngularFire独立API(推荐,符合Angular 17最佳实践)

  • 修改auth.service.ts:弃用compat模块,改用新的Firebase原生API和AngularFire独立服务:
    import { Injectable, NgZone, isDevMode } from '@angular/core';
    import { User } from '../services/user';
    import { Auth, createUserWithEmailAndPassword, signInWithEmailAndPassword, signOut } from 'firebase/auth';
    import { Firestore, doc, setDoc } from 'firebase/firestore';
    import { Router } from '@angular/router';
    
    @Injectable({
      providedIn: 'root'
    })
    export class AuthService {
      userData: any; 
      constructor(
        private firestore: Firestore, 
        private auth: Auth,
        private router: Router,
        private ngZone: NgZone    
      ) {
        // 服务逻辑改用新API实现
      }
    }
    
  • 修改app.config.ts:移除所有旧AngularFire*Module的导入,仅保留新独立API配置:
    export const appConfig: ApplicationConfig = {
      providers: [
        provideRouter(routes), 
        provideAnimations(), 
        provideFirebaseApp(() => initializeApp(environment.firebase)),  
        provideAuth(() => getAuth()), 
        provideAnalytics(() => getAnalytics()), 
        ScreenTrackingService, UserTrackingService, 
        provideFirestore(() => getFirestore()), 
        provideStorage(() => getStorage()),
        // 移除所有AngularFire*Module相关配置
      ]
    };
    

内容的提问来源于stack exchange,提问作者Pung Worathiti Manosroi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 04:31:25