У меня есть файл config.json с переменными среды для моего приложения angular 7, который я затем загружаю в среду const и который работает нормально.
Как только я пытаюсь передать переменные этой среды в мои новые библиотеки с использованием InjectionTokens, начинают происходить странные поведения.
Я хотел бы не только узнать, как это исправить, но и узнать, что происходит, если это возможно.
Я уже пробовал несколько способов импорта файла JSON, включая использование XMLHttpRequest.
Также попытался глубоко скопировать объект, прежде чем установить его в среду и еще несколько вещей.
Мой файл config.json:
{
"baseHref": "app",
"apiEndpoint": "http://localhost:8080/api"
}
Мой файл environment.prod.ts:
import config from '../config.json';
export const environment = {
production: true,
baseHref: config.baseHref,
apiEndpoint: config.apiEndpoint,
testing: 'Testing'
};
console.log(environment);
Мой файл app.module.ts:
imports: [
TestingModule.forRoot({
baseHref: environment.baseHref,
apiEndpoint: environment.apiEndpoint,
testing: environment.testing,
production: environment.production
}),
]
Мой файл app.module.ts:
export class TestingModule {
static forRoot(config: any): ModuleWithProviders {
return {
ngModule: TestingModule,
providers: [
{
provide: TESTING_CONFIG,
useValue: config,
},
],
};
}
}
Мой конструктор testing.service.ts:
constructor(@Inject(TESTING_CONFIG) private config: any) {
console.log(this.config);
}
Ожидается, что все переменные с данными будут храниться в обоих журналах консоли, но вместо этого в файле среды 1 содержатся все данные, но во втором журнале консоли будет указано значение apiEndpoint как null, а тестирование - как «Тестирование».
Я также попытался отладить приложение и прямо перед тем, как в forRoot уже есть все данные о свойстве среды.
Также заметил, запустив это с:
"aot": true,
"buildOptimizer": true
Имеет эту проблему при работе без этих двух опций фактически полностью работает.