Ionic 3, ngx-translate 9.x; build -> ngc: Внутренняя ошибка: неизвестный идентификатор TranslateLoader & TranslatePipe - PullRequest
0 голосов
/ 13 мая 2018

У меня есть некоторые трудности с ngx-translate (v9) с отложенной загрузкой под ионным 3.9.2.В браузере все работает нормально, пока я не запустил "buid --prod".Часть npc (я думаю, что это компиляция AOT) процесса сборки сообщает о «неизвестном идентификаторе» для TranslateLoader и TranslatePipe.

Хотя я следовал учебнику ngx по ionic , прочиталgithub из ngx-translate и StackOverflow, я не нашел обсуждения подобной проблемы.Поэтому я хотел бы обратиться за помощью.

Я получаю следующую ошибку при запуске ionic cordova build ios --prod (обратите внимание, в первой строке показаны проблемы с TranslateLoader и TranslatePipe):

Error: Internal error: unknown identifier [{"filePath":"..../node_modules/@ngx-translate/core/core.d.ts","name":"TranslateLoader","members":[]},{"filePath":"..../node_modules/@ngx-translate/core/core.d.ts","name":"TranslatePipe","members":[]}]
    at Object.importExpr$$1 [as importExpr] (..../node_modules/@angular/compiler/bundles/compiler.umd.js:31063:23)
    at tokenExpr (..../node_modules/@angular/compiler/bundles/compiler.umd.js:20063:39)
    at providerDef (..../node_modules/@angular/compiler/bundles/compiler.umd.js:19966:20)
    at ..../node_modules/@angular/compiler/bundles/compiler.umd.js:20188:77
    at Array.map (<anonymous>)
    at NgModuleCompiler.compile (..../node_modules/@angular/compiler/bundles/compiler.umd.js:20188:44)
    at AotCompiler._compileModule (..../node_modules/@angular/compiler/bundles/compiler.umd.js:30956:32)
    at ..../node_modules/@angular/compiler/bundles/compiler.umd.js:30838:66
    at Array.forEach (<anonymous>)
    at AotCompiler._compileImplFile (..../node_modules/@angular/compiler/bundles/compiler.umd.js:30838:19)
[11:14:07]  copy finished in 9.27 s 

Это мой app.module.ts

...

import { HttpClient, HttpClientModule } from "@angular/common/http";
import { TranslateLoader, TranslateModule } from "@ngx-translate/core";
import { TranslateHttpLoader } from "@ngx-translate/http-loader";

...

@NgModule({
  declarations: [
    MyApp,
  ],
  imports: [
    TranslateModule.forRoot({
      loader: {
        provide: [TranslateLoader],
        useFactory: (HttpLoaderFactory),
        deps: [HttpClient]
      }
    }),
    IonicModule.forRoot(MyApp,{
      preloadModules: true, 
    }),
    BrowserModule,
    HttpClientModule,
    BrowserAnimationsModule,
  ],
  bootstrap: [IonicApp],
  entryComponents: [
    MyApp,

  ],
  providers: [SplashScreen, Keyboard, StatusBar, {provide: ErrorHandler, useClass: IonicErrorHandler}, AuthService]
})

...

package.json:

"@ngx-translate/core": "^9.1.1",
"@ngx-translate/http-loader": "^2.0.1", // 3rd version gives the same error.

Затем я импортирую ngx-translate вприложение как .forChild ({...}) с той же экспортируемой функцией HttpLoaderFactory ().

Самое странное, что когда я меняю инициацию с

    TranslateModule.forRoot({
      loader: {
        provide: TranslateLoader,
        useFactory: (HttpLoaderFactory),
        deps: [HttpClient]
      }
    }),

на (предоставить TranslateLoaderкак массив)

    TranslateModule.forRoot({
      loader: {
        provide: [TranslateLoader],
        useFactory: (HttpLoaderFactory),
        deps: [HttpClient]
      }
    }),

Сообщение об ошибке становится короче, и проблема с TranslatePipe исчезает:

Error: Internal error: unknown identifier [{"filePath":".../node_modules/@ngx-translate/core/core.d.ts","name":"TranslateLoader","members":[]}]
    at Object.importExpr$$1 [as importExpr] (.../node_modules/@angular/compiler/bundles/compiler.umd.js:31063:23)
    at tokenExpr (.../node_modules/@angular/compiler/bundles/compiler.umd.js:20063:39)
    at providerDef (.../node_modules/@angular/compiler/bundles/compiler.umd.js:19966:20)
    at .../node_modules/@angular/compiler/bundles/compiler.umd.js:20188:77
    at Array.map (<anonymous>)
    at NgModuleCompiler.compile (.../node_modules/@angular/compiler/bundles/compiler.umd.js:20188:44)
    at AotCompiler._compileModule (.../node_modules/@angular/compiler/bundles/compiler.umd.js:30956:32)
    at .../node_modules/@angular/compiler/bundles/compiler.umd.js:30838:66
    at Array.forEach (<anonymous>)
    at AotCompiler._compileImplFile (.../node_modules/@angular/compiler/bundles/compiler.umd.js:30838:19)

Не могли бы вы помочь?

С уважением

Якуб

1 Ответ

0 голосов
/ 13 мая 2018

Хорошо, я понял это. Я запускал TranslateModule с этим на всех своих страницах и компонентах:

TranslateModule.forChild({
      loader: {
        provide: [TranslateLoader],
        useFactory: (HttpLoaderFactory),
        deps: [HttpClient]
      }
    }),

Я изменил это на:

TranslateModule.forChild()

и это работает.

Может быть, это кому-нибудь поможет.

...