在 Angular2 应用程序中使用 Docker 环境变量

siv*_*vaD 5 docker webpack angular

我想在 Angular-Cli (1.0.0-beta.16) 的“environment.prod.ts”内使用预定义的 Docker 环境变量。

用例:

环境.产品.ts:

export const environment = {
production: true,
host1: $ENV1, //specific service endpoint goes here
host2: $ENV2 //specific service endpoint goes here
};
Run Code Online (Sandbox Code Playgroud)

我的基于 Angular CLI 的应用程序依赖于environment.prod.ts 来获取与后端服务(host1、host2)相关的主机信息,并且应用程序会经历各种环境,例如 DEV、TEST、QA、PROD ...

$ENV1 , $ENV2 在 Docker 运行期间作为环境变量提供

这可能吗 ?如果没有,请纠正我的理解并提出任何其他替代解决方案

dav*_*vid 0

Angular cli 环境是编译时常量。当然,这与您在使用 Docker 时对应用程序的看法有些矛盾。使用 Docker,您希望在不同的环境中运行相同的工件(使用环境变量)。

到目前为止,我想出了两个解决方案,尽管这两个方案对我来说都很老套:

使用服务器端渲染

...并将变量注入全局范围。您可以<script>在开始标记后附加另一个带有所需变量的标记<html>

<script>
var environment = { 
  host1: 'some injected value', 
  host2: 'depending on the view engine you are using' 
};
</script>
Run Code Online (Sandbox Code Playgroud)

然后有一个界面

export interface Environment {
  host1: string;
  host2: string;
}

interface Window {
  environment: Environment;
}
Run Code Online (Sandbox Code Playgroud)

使用 API 调用

...在应用程序启动时/之后获取变量

app.component.ts你可以在里面做这件事onInit(),或者在你的第一条路线上安排一个守卫。