Как обеспечить локаль для Angular JIT только в режиме разработки? - PullRequest
0 голосов
/ 29 августа 2018

Положение

У меня есть приложение Angular 6, которое я создаю на разных языках. При сборке для производства я использую компиляцию AOT, но в режиме разработки я использую JIT.

Угловая документация гласит, что интернационализация для JIT-компилятора должна быть настроена путем предоставления LOCALE_ID, как показано ниже:

import { LOCALE_ID, NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';

import { AppComponent } from '../src/app/app.component';

@NgModule({
  imports: [ BrowserModule ],
  declarations: [ AppComponent ],
  providers: [ { provide: LOCALE_ID, useValue: 'fr' } ],
  bootstrap: [ AppComponent ]
})
export class AppModule {}

Задача

Подход работает нормально, но так как в производственных сборках языковой стандарт устанавливается флагом --configuration=<locale>, я бы хотел, чтобы вышеуказанный поставщик { provide: LOCALE_ID, useValue: 'fr' } был предоставлен только в режиме разработки, чтобы не перекрывать мои производственные конфигурации. В идеале, он также должен быть доступен для дерева и вообще не включен в производственный код.

Вопрос

Как я могу предоставить LOCALE_ID только в режиме разработки? Могу ли я сделать его провайдером с поддержкой дерева?

Возможное решение

Единственный способ создания поставщика условного значения, доступного для дерева, упомянутого в Документация Angular , - создать токен впрыска, как показано ниже:

import { InjectionToken } from '@angular/core';
import { environment } from '../../environment';

if (environment.production) {
  const LOCALE_TOKEN = new InjectionToken(
    'LOCALE', 
    { providedIn: 'root', factory: () => 'fr' }
  );
}

Но я не могу сам создать токен инъекции, так как он уже создан Angular (LOCALE_ID).

Так что мне кажется, что мне остается только предоставить этот токен в @NgModule декораторе, где я не могу применить условную логику, и он будет предоставлен как в разработке, так и в производственной сборке.

...