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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 08:27:15