Angular 19:极简项目生产构建仍出现NullInjector错误求助
问题描述
基于Ionic + Angular 19开发的两个项目,开发构建正常,但生产构建时触发NullInjector错误,即使精简到极简项目结构仍无法解决。生产环境的错误信息经过代码混淆,无法直接定位缺失的提供者:
NullInjectorError: R3InjectorError[t -> _i -> _i]:
NullInjectorError: No provider for _i!
极简版app.config.ts代码如下:
import { ApplicationConfig, importProvidersFrom } from '@angular/core'; import { IonicModule, IonicRouteStrategy } from '@ionic/angular'; import { RouteReuseStrategy } from '@angular/router'; import { provideRouter, withPreloading, PreloadAllModules } from '@angular/router'; import { routes } from './app-routing.module'; import { provideAuth, getAuth, indexedDBLocalPersistence, browserLocalPersistence } from '@angular/fire/auth'; import { isPlatform } from '@ionic/angular'; export const appConfig: ApplicationConfig = { providers: [ { provide: RouteReuseStrategy, useClass: IonicRouteStrategy }, provideAuth(() => { const auth = getAuth(); if (isPlatform('android')) { auth.setPersistence(indexedDBLocalPersistence); } else { auth.setPersistence(browserLocalPersistence); } return auth; }), provideRouter(routes, withPreloading(PreloadAllModules)), importProvidersFrom(IonicModule.forRoot()) ] };
可能的修复方向
缺少Angular Fire核心初始化配置:
provideAuth依赖Angular Fire的核心应用实例,生产构建时因依赖链缺失触发注入错误。需先添加provideFirebaseApp完成Firebase初始化,示例:import { provideFirebaseApp, initializeApp } from '@angular/fire/app'; // 替换成你的Firebase配置 const firebaseConfig = { apiKey: "YOUR_API_KEY", authDomain: "YOUR_AUTH_DOMAIN", // 其他配置项 }; export const appConfig: ApplicationConfig = { providers: [ // 优先初始化Firebase核心应用 provideFirebaseApp(() => initializeApp(firebaseConfig)), // 再配置Auth服务 provideAuth(() => { const auth = getAuth(); const platform = inject(Platform); if (platform.is('android')) { auth.setPersistence(indexedDBLocalPersistence); } else { auth.setPersistence(browserLocalPersistence); } return auth; }), // 其他原有提供者 { provide: RouteReuseStrategy, useClass: IonicRouteStrategy }, provideRouter(routes, withPreloading(PreloadAllModules)), importProvidersFrom(IonicModule.forRoot()) ] };isPlatform在初始化阶段依赖异常:isPlatform是一个便捷函数,在生产构建的服务初始化阶段可能因平台检测依赖未就绪导致异常。改用inject(Platform)显式注入平台实例,确保依赖正确加载:import { inject } from '@angular/core'; import { Platform } from '@ionic/angular'; // 在provideAuth的工厂函数中修改 provideAuth(() => { const auth = getAuth(); const platform = inject(Platform); if (platform.is('android')) { auth.setPersistence(indexedDBLocalPersistence); } else { auth.setPersistence(browserLocalPersistence); } return auth; })版本兼容性问题:确认Angular Fire版本是否适配Angular 19,部分旧版Angular Fire在Angular 19的生产构建优化逻辑下会出现依赖注入异常,建议升级Angular Fire至最新兼容版本。
内容的提问来源于stack exchange,提问作者NorthFred
相关产品推荐
相关产品推荐

