首页 > 解决方案 > Angular APP_INITIALIZER 阻止构建功能模块

问题描述

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

在此处输入图像描述

这是没有的输出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);
        })
}

如您所见,工厂返回了一个承诺,它加载了配置等,但是发生了一些事情,阻止了它构建功能模块。我是否在工厂中遗漏了一些阻止它加载功能模块的东西?

编辑

作为测试,我只是在 initLoad 工厂函数中立即返回 true,而在未构建功能模块的情况下也发生了同样的事情。

编辑 2

经过更多的挖掘和研究,我相信更准确的说法是延迟加载的模块是那些没有被构建的模块。如果功能模块没有延迟加载,它似乎会继续构建并按预期工作。

这是一个带有演示应用程序的 GitHub 存储库,其中模块设置为延迟加载。如果您注释掉 , 中的providers数组AppModule并运行,您将在块ng build的正下方看到一条关于正在构建的延迟加载模块的行。main然后,重新添加 providers 数组并运行ng buildmain那里只有块。

标签: angular

解决方案


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

所以只需导出它:

export function initLoad() {...}

推荐阅读