【问题标题】:ionic prod build throws Injector Error on runionic prod build 在运行时抛出 Injector Error
【发布时间】:2019-12-10 14:00:37
【问题描述】:

使用“ionic cordova build android --prod”构建一个 ionic4 angular 应用程序。在设备上遇到静态注入错误。使用 'ionic serve'、'ionic cordova build android' 和 'ionic cordova run android --device' 调试构建不会引发此错误。

在 app-routing.module 中使用延迟加载,并在 app.module 中提供根级别 @ionic-natives。由于错误对于 uglify 来说是神秘的,因此无法确定哪个服务/模块是原因。有没有办法禁用 uglify 和缩小来调试问题

离子信息 =>

Ionic:

   ionic (Ionic CLI)             : 4.12.0 (/usr/local/lib/node_modules/ionic)
   Ionic Framework               : @ionic/angular 4.0.0
   @angular-devkit/build-angular : 0.12.4
   @angular-devkit/schematics    : 7.2.4
   @angular/cli                  : 7.3.9
   @ionic/angular-toolkit        : 1.2.3

Cordova:

   cordova (Cordova CLI) : 8.1.2 (cordova-lib@8.1.1)
   Cordova Platforms     : android 7.1.4
   Cordova Plugins       : cordova-plugin-ionic-keyboard 2.1.3, cordova-plugin-ionic-webview 2.5.1, (and 14 other plugins)

System:

   Android SDK Tools : 26.1.1 (/home/aniraj/Android/Sdk)
   NodeJS            : v10.16.0 (/usr/bin/node)
   npm               : 6.4.1
   OS                : Linux 4.15

app.module.ts =>

import { environment } from './../environments/environment';
import { RatingModule } from 'ngx-rating';
import { MomentModule } from 'ngx-moment';
import { HttpClient } from '@angular/common/http';
import { TranslateModule, TranslateLoader } from '@ngx-translate/core';
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { RouteReuseStrategy } from '@angular/router';
import { IonicModule, IonicRouteStrategy } from '@ionic/angular';
import { AppComponent } from './app.component';
import { AppRoutingModule } from './app-routing.module';
import { HttpClientModule } from '@angular/common/http';
import { TranslateHttpLoader } from '@ngx-translate/http-loader';
import { AngularFireModule } from '@angular/fire';
import { AngularFireAuthModule } from '@angular/fire/auth';
import { AngularFirestoreModule } from '@angular/fire/firestore'
import { AngularFireStorageModule } from '@angular/fire/storage';
import { AngularFireFunctionsModule } from '@angular/fire/functions';
import { SharedComponentModule } from './components/shared-components.module';
import { SharedModalModule } from './modals/shared-modals.module';
import { IonicStorageModule } from '@ionic/storage';
import { Chooser } from '@ionic-native/chooser/ngx';
import { Network } from '@ionic-native/network/ngx';
import { AppVersion } from '@ionic-native/app-version/ngx';
import { StatusBar } from '@ionic-native/status-bar/ngx';
import { EmailComposer } from '@ionic-native/email-composer/ngx';
import { UniqueDeviceID } from '@ionic-native/unique-device-id/ngx';
import { SplashScreen } from '@ionic-native/splash-screen/ngx';

export function createTranslateLoader(http: HttpClient) {
  return new TranslateHttpLoader(http, '../assets/i18n/', '.json');
}

@NgModule({
  declarations: [AppComponent],
      entryComponents: [],
  imports: [
    BrowserModule,
    IonicModule.forRoot(),
    AppRoutingModule,
    HttpClientModule,
    MomentModule,
    RatingModule,
    AngularFireModule.initializeApp(environment.firebaseConfig),
    IonicStorageModule.forRoot(),
    AngularFireAuthModule,
    AngularFirestoreModule,    
    AngularFireStorageModule, AngularFireFunctionsModule,
    SharedComponentModule, SharedModalModule,
    TranslateModule.forRoot({
      loader: {
        provide: TranslateLoader,
        useFactory: createTranslateLoader,
        deps: [HttpClient]
      }
    }) 
  ],
  providers[
  StatusBar, Network, AppVersion, SplashScreen, EmailComposer, UniqueDeviceID, Chooser,
  { provide: RouteReuseStrategy, useClass: IonicRouteStrategy }
  ],

  bootstrap: [AppComponent]
})
export class AppModule { }

在 Chrome 上检查时出错 =>

Error: StaticInjectorError(a)[k -> r]: 
  StaticInjectorError(Platform: core)[k -> r]: 
    NullInjectorError: No provider for r!
    at pa.get (main.73d45aba5e0db24763c3.js:1)
    at main.73d45aba5e0db24763c3.js:1
    at e (main.73d45aba5e0db24763c3.js:1)
    at Ta.get (main.73d45aba5e0db24763c3.js:1)
    at main.73d45aba5e0db24763c3.js:1
    at e (main.73d45aba5e0db24763c3.js:1)
    at Ta.get (main.73d45aba5e0db24763c3.js:1)
    at _g (main.73d45aba5e0db24763c3.js:1)
    at Bg.get (main.73d45aba5e0db24763c3.js:1)
    at uy (main.73d45aba5e0db24763c3.js:1)
cordova.935a9f4e1f7afeca168d.js:1

【问题讨论】:

    标签: angular dependency-injection runtime-error ionic4


    【解决方案1】:

    启用 aot 应该足以检测注入错误,无需完整的 prod 构建。

    尝试类似:

    ionic serve -- --aot
    

    【讨论】:

      猜你喜欢
      • 2021-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-17
      • 2019-07-18
      • 1970-01-01
      • 2018-06-19
      • 1970-01-01
      相关资源
      最近更新 更多