我的目标是在多个环境(dev,qa,prod)中使用相同的角度构建。 在我的代码中,我正在访问一些rest api。正如您已经了解的那样,URL的主机名在环境之间是不同的。
我在线上看到了多个解决方案,并且对以下文章中描述的一种特定解决方案有疑问:Host configurations as assets — mount configuration files per environment:
import {Injectable} from '@angular/core';
import {HttpClient} from '@angular/common/http';
import {Observable} from 'rxjs';
import {shareReplay} from 'rxjs/operators';
interface Configuration {
resourceServerA: string;
resourceServerB: string;
stage: string;
}
@Injectable({providedIn: 'root'})
export class ConfigAssetLoaderService {
private readonly CONFIG_URL = 'assets/config/config.json';
private configuration$: Observable<Configuration>;
constructor(private http: HttpClient) {
}
public loadConfigurations(): any {
if (!this.configuration$) {
this.configuration$ = this.http.get<Configuration>(this.CONFIG_URL).pipe(
shareReplay(1)
);
}
return this.configuration$;
}
}
让我们假设我使用了此解决方案,并且有一个专用服务可以从文件系统中加载config.json文件。我将应用程序的docker映像部署到docker容器(使用nginx)。应用启动时,我从文件系统加载文件,对吗?好吧,这是我所缺少的部分。我的应用程序是前端应用程序,因此在客户浏览器上运行的服务是否会尝试从客户端加载配置文件?