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

标签 angular docker webpack

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

用例:

环境.prod.ts:

export const environment = {
production: true,
host1: $ENV1, //specific service endpoint goes here
host2: $ENV2 //specific service endpoint goes here
};

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

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

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

最佳答案

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

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

使用服务端渲染

... 并将变量注入(inject)全局范围。您可以再附加一个 <script>在开始后用所需的变量标记 <html>标签:

<script>
var environment = { 
  host1: 'some injected value', 
  host2: 'depending on the view engine you are using' 
};
</script>

然后有一个接口(interface)

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

interface Window {
  environment: Environment;
}

使用 API 调用

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

您可以在 app.component.ts 中执行此操作在 onInit()或者有一个 guard在您的第一条路线上。

关于angular - 在 Angular2 应用程序中使用 Docker 环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40157472/

相关文章:

javascript - Angular2 - 通过超时函数将变量与 EventEmitter 传递给父组件

Angular 和 PouchDBFind 插件

node.js - 使用 Node js 将 Angular 应用程序作为 docker 镜像运行

docker - 无法从 gcloud 计算虚拟机访问私有(private)容器注册表

spring - 如何从 Spring Boot 应用程序提供 React 应用程序?

angular - 如何使用primeng将电话号码附加到 Angular 5的国家代码

angular - 错误 错误 : Uncaught (in promise): Error: Cannot match any routes. URL 段: 'main/knowledge-base'

apache - Pentaho + apache 反向代理 + 代理 SSL 集成

npm - 通过使用 npm 安装在 webpack 中使用 particles.js

reactjs - Webpack 代码分割,如果从单独的文件导入,则找不到 System.import 路由