角度APP_INITIALIZER阻止构建功能模块

时间:2018-09-28 21:53:04

标签: angular

当我的应用程序引导时,我正在Angular应用程序中使用APP_INITIALIZER来加载配置。从技术上讲,它有效;配置已加载,并且app.module似乎正确构建,但是没有构建任何功能模块,因此无法使用。这是ng buildAPP_INITIALIZER的输出:

enter image description here

这是没有APP_INITIALIZER的输出:

enter image description here

这是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

经过进一步的研究,我相信更准确的说法是,延迟加载的模块是尚未构建的模块。如果某个功能模块不是延迟加载的,则它似乎可以继续构建并按预期工作。

Here's a GitHub repo和演示应用程序,其中将模块设置为延迟加载。如果注释掉providers中的AppModule数组并运行ng build,则会在main块正下方看到一条有关正在构建的延迟加载模块的行。 。然后,重新添加provider数组并运行ng build,仅存在main块。

1 个答案:

答案 0 :(得分:2)

似乎不导出initConfig函数会破坏依赖关系解析算法。

因此只需将其导出:

export function initLoad() {...}