簡體   English   中英

角度APP_INITIALIZER阻止構建功能模塊

[英]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,在未構建功能模塊的地方也發生了同樣的事情。

編輯2

經過進一步的研究,我相信更准確的說法是,延遲加載的模塊是尚未構建的模塊。 如果功能部件模塊不是延遲加載的,則它似乎可以繼續構建並按預期工作。

這是帶有演示應用程序的GitHub存儲庫 ,其中已將模塊設置為延遲加載。 如果您注釋掉AppModuleproviders數組,並運行ng build ,則會在main塊正下方看到一條有關正在構建的延遲加載模塊的行。 然后,重新添加provider數組並運行ng build ,只有main塊在那里。

似乎不導出initConfig函數會破壞依賴關系解析算法。

因此,只需將其導出:

export function initLoad() {...}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM