gpt4 book ai didi

angular - 在 Angular 库中配置时,APP_INITIALIZER 工厂根本没有运行

转载 作者:行者123 更新时间:2023-12-04 08:49:01 26 4
gpt4 key购买 nike

库中的示例代码:

export function appSettingsLoader(): () => Promise<unknown> {
console.log('i should run first')
const func = function () { return Promise.Resolve()) };
return func;
}

@NgModule({
imports: [
MsalModule
]
})
export class MsalAuthenticationModule {
public static forRoot(options: {
config: Type<IMsalConfigurationService>
}): ModuleWithProviders {
return {
ngModule: MsalAuthenticationModule,
providers: [
{
provide: APP_INITIALIZER,
useFactory: appSettingsLoader,
deps: [],
multi: true
}
]
};
}
}
应用模块中的代码:
@NgModule({
declarations: [
AppComponent
],
imports: [
BrowserModule,
MsalAuthenticationModule.forRoot({ config: Config })
],
bootstrap: [AppComponent]
})
export class AppModule {
}
我永远不会看到我的console.log。
编辑:
根据评论,我决定尝试在项目下的同一应用程序中使用带有库的新 Angular 应用程序进行复制。令我惊讶的是,app_initializer 起作用了。
因此,我随后在该工作库上使用了 NPM Link,并将模块从那里导入到我的实际应用程序(不同的工作区)中。它没有用。
这告诉我 app_initializer 只能在库位于同一个项目中时工作,这使得 app_initializer 对我来说毫无值(value)。
这似乎不正确,但这是我观察到的。

最佳答案

问题来自多个模块捆绑 - 即使通过 npm 链接使用它来模拟发布,库的 Angular 节点模块目录错误(使用库工作区 node_modules 文件夹)也是如此。
将此添加到我的客户端应用程序中,该应用程序使用 tsconfig 编译选项中的库:

"paths": {
"@angular/*": [
"./node_modules/@angular/*"
]
}
问题解决了。
显然,该库必须使用完全相同的节点模块才能 Hook 到此类初始化 Hook 。
编辑:
我有更多的问题。如果你有 2 个 app_initializers a 和 b,a 是异步的,b 依赖于 a,应用程序不会等待 a 解决,因此 b 会抛出错误。为了解决这个问题,我使用了 b 中的注入(inject)器。

关于angular - 在 Angular 库中配置时,APP_INITIALIZER 工厂根本没有运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64173172/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com