[英]Angular APP_INITIALIZER prevents feature modules from building
當我的應用程序引導時,我在Angular應用程序中使用APP_INITIALIZER
加載配置。 從技術上講,它有效; 配置已加載,並且app.module似乎正確構建,但是沒有構建任何功能模塊,因此無法使用。 這是使用APP_INITIALIZER
進行ng build
的輸出:
這是沒有APP_INITIALIZER
的輸出:
這是在APP_INITIALIZER
工廠中調用的代碼:
// in app.module.ts
function initConfig(configService: AppConfigService) {
return () => configService.loadConfig();
}
// in app-config.service.ts
public loadConfig() {
return this._http.get('./assets/app-config/config.json')
.toPromise()
.then((config: any) => {
this.config = config;
this.configSubject$.next(this.config);
})
}
因此,您可以看到,工廠返回了一個Promise,它加載了配置等,但是發生了一些事情,阻止了它構建功能模塊。 我在工廠中缺少什么東西阻止了它加載功能模塊嗎?
作為測試,我只是在initLoad工廠函數中立即返回true,在未構建功能模塊的地方也發生了同樣的事情。
經過進一步的研究,我相信更准確的說法是,延遲加載的模塊是尚未構建的模塊。 如果功能部件模塊不是延遲加載的,則它似乎可以繼續構建並按預期工作。
這是帶有演示應用程序的GitHub存儲庫 ,其中已將模塊設置為延遲加載。 如果您注釋掉AppModule
的providers
數組,並運行ng build
,則會在main
塊正下方看到一條有關正在構建的延遲加載模塊的行。 然后,重新添加provider數組並運行ng build
,只有main
塊在那里。
似乎不導出initConfig
函數會破壞依賴關系解析算法。
因此,只需將其導出:
export function initLoad() {...}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.