Angular 17:app.config.server.ts 中的 mergeApplicationConfig 会导致 app.config.ts 中导入的提供程序初始化

问题描述 投票:0回答:1

使用 Angular 17 CLI 生成的独立应用程序会将 app.config.ts 导入到 app.config.server.ts 中,并默认合并 2 个配置。

这会导致在 app.config.ts 中导入的所有提供程序也被导入到 app.config.server.ts 中,从而在服务器上实例化。

如果客户端所需的提供程序在构造函数内使用 sessionStorage,则会导致错误,因为 sessionStorage 未在服务器上定义。

我尝试从 app.config.server.ts 中删除 app.config.ts 的导入,以及对 mergeApplicationConfig(appConfig, serverConfig) 的调用。这解决了问题,并且应用程序似乎运行良好。

我的问题是,是否有必要合并app.config.server.ts中的2个配置,如果需要,为什么?

其次,如果有必要,如何在不检查提供程序的构造函数内部是否从服务器或浏览器调用它的情况下解决此问题,因为它实际上不应该由服务器调用。

谢谢!

angular session-storage angular-providers angular-standalone-components
1个回答
0
投票

是否有必要合并 app.config.server.ts 中的 2 个配置,如果需要,为什么?

尽管很少有依赖关系可能会有所不同(

SessionStorage
就像你说的那样),但两者很少有共同点(例如:
provideHttpClient()
provideRouter([])
)在两个位置维护重复的代码将是乏味的,因此我们有
mergeApplicationConfig(appConfig, serverConfig)
来帮助你可以更好地维护共同的依赖关系!

如果有必要,如何在不检查提供程序的构造函数内部是否从服务器或浏览器调用的情况下解决此问题,因为它实际上永远不应该由服务器调用。

当您删除所有这些时,应用程序仍然可以工作,只是代码将在您需要维护的两个地方重复,即使您从

app.config.server.ts
中删除依赖项,组件中仍然存在由两者共享的导入客户端和服务器代码。

因此必须有可能在服务器上出错的代码块,才能使用

isPlatformBrowser
来停止服务器中的执行!

© www.soinside.com 2019 - 2024. All rights reserved.