使用 Angular Universal 在 SSR 中处理环境变量

Handling environment variables in SSR with Angular Universal

我正在将 SSR 应用于已有的 Angular 项目。在之前的客户端呈现 CSR 实现中,我使用全局变量 window 来处理一个构建的 ENV VARS - 在此 article 之后的多个部署 CI/CD 目的。

我尝试使用自定义服务通过 APP_INITIALIZERenv vars 传递给 app.modules.ts 但没有成功,因为使用 forRoot() 的环境将被调用在我服务之前。此外,webpack 在这种情况下无能为力,因为需要一次构建 - 多次部署。

作为下面的示例,我尝试将 EnvironmentService 注入模块,但似乎尚未从文件中获取数据,如上文所述。

import { EnvironmentService } from './environments/EnvironmentService';

let envService: EnvironmentService;

@NgModule({
    declarations: [...],
    imports: [ServerLogModule.forRoot(envService.ENV_VARS)],
    providers: [...]
})
export class AppModule {}

• 无法将环境变量从 app.modules.ts 提供程序中的另一个服务传递到 forRoot() 方法,因为您将无法在调用该方法之前检索任何数据.

为了让它工作,最好使用 webpack 在构建时创建一个包含正确数据的 environment.ts 文件,并在 app.modules.ts [=16] 中使用它=]

• 您的问题中提到的文章 - 如您所说 - 对于客户端呈现情况非常有效,但对 SSR 使用相同的方法可能需要对 some/many 进行大量更改您可能已经做出了架构选择。