我有Angular 6应用,正在使用不同的语言构建。为生产而构建时,我正在使用AOT编译,但是在开发模式中,我正在使用JIT。
Angular documentation指出,需要通过提供LOCALE_ID
来配置JIT编译器的国际化,如下所示:
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 documentation中提到的条件树可摇值提供者的唯一方法是创建注入令牌,如下所示:
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
装饰器中提供此令牌了,在这里我无法应用任何条件逻辑,开发和生产版本中都将提供它。