angular - Angular APP_INITIALIZER 阻止构建功能模块
问题描述
当我APP_INITIALIZER
的应用程序启动时,我在我的 Angular 应用程序中使用加载配置。它在技术上有效;配置已加载并且 app.module 似乎可以正确构建,但没有构建任何功能模块,因此无法使用。这是ng build
with 的输出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 build
,main
那里只有块。
解决方案
似乎不导出initConfig
函数会破坏依赖关系解析算法。
所以只需导出它:
export function initLoad() {...}
推荐阅读
- django - 与 Office 365 Outlook 的 Django smtp 连接
- cassandra - 减少卡桑德拉墓碑
- flutter - 相机图像未添加到颤动的图像列表中
- angular - Angular 在 Mat-Table 中使用另一个值
- angular - PrimeNg 全局过滤器
- arrays - 解析一个包含多个元素的 json 文件
- reactjs - Nextjs:使用 Next.js 的默认加载器的图像优化与“下一个导出”不兼容
- docker - rror:调用过程中背书失败。响应:状态:500 消息:“模拟错误:执行事务失败
- sql-server - 使用 TCP 的 Kubernetes 主机和服务入口映射
- datatables - 隐藏复选框特定列和单词数据表上的行