angular - ionic prod build 在运行时引发 Injector Error
问题描述
使用“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
解决方案
启用 aot 应该足以检测到注入错误,不需要完整的 prod 构建。
尝试类似:
ionic serve -- --aot
推荐阅读
- java - 为什么 Glassfish 服务器在使用 ZoneId 创建 java.time.LocalDate 实例时抛出 NoSuchMethodError
- javascript - 当用户使用passportjs成功登录时如何在reactjs中重定向页面
- python - 在终端中为 VSCODE 运行代码与运行 Python 文件
- r - 用括号内的值替换值
- blazor - Blazor 服务器 Microsoft.JSInterop.JSException:“值 'window.resizeListener' 不是函数
- python - 在函数之外创建按钮和标签并在 Tkinter 需要时将它们网格化是不是更好的礼仪?
- bluetooth-lowenergy - Wahoo kickr BLE 未找到 CSC 服务
- laravel - Laravel 关系 - 与 group by
- excel - 从一个工作簿复制到另一个工作簿中的特定工作表
- php - 如何管理 Mysql 约束失败错误?