【问题标题】:OS environment variables in AngularAngular 中的操作系统环境变量
【发布时间】:2018-12-13 22:25:00
【问题描述】:

我知道 Angular 中的 environment.ts 文件,但我最终会将敏感数据提交到我的 git 存储库中。在 Java 中,我可以只引用可以在服务器上设置的操作系统环境变量。

在我们公司,CI 将我们所有的应用程序打包并推送到 OpenShift 中,这意味着我无法访问文件系统,所以我不能手动将生产环境.ts 放在那里。

有人知道如何获取操作系统环境变量吗?

【问题讨论】:

  • 通过需要部署在同一台机器上的网络服务?
  • 在我们的环境中,每个虚拟机只能部署一个,并且也只有一个端口可用。当涉及到这样的事情时,它有点受到限制。
  • 所以你为所有环境创建一个包?
  • 但是我也可以在第一个应用程序中硬编码我的数据。我们的 CI 只是从 git 存储库中提取代码,将其 docker 化并将其部署到 OpenShift 应用程序中。两个存储库 -> 具有两个不同路由和 URL 的两个应用程序

标签: javascript angular typescript docker environment-variables


【解决方案1】:
  1. 有一个为配置提供服务的 API,并从 Angular 中检索它

    app.get("/api/config/default", function(req, res) {
      res.send({
       a: process.env["A_VAR"]
      });
    })
    
  2. 让您的后端生成角度常数

    app.get("/generated-config.js", function(req, res) {
      res.send(
        "angular.module('myApp').constant('MY_CONFIG',"
         + "{'a': \"" + process.env["A_VAR"] + "\""
         + "})"
       );
    });
    

    您可以使用ng-constant。 我更喜欢这种方法,因为阻塞依赖于这个配置的角度控制器和服务变得非常容易。在我的例子中,后端生成这个文件并将它与其他静态文件一起提供。

【讨论】:

    【解决方案2】:

    如果您将 Angular 应用程序与 webpack 捆绑在一起,您可以使用 webpack.DefinePlugin

    plugins: [
        new webpack.DefinePlugin({
            "some_variable": JSON.stringify(process.env.SOME_ENV_VAR || "my_default_value")
        })
    ]
    

    然后您可以在 Angular 应用程序中引用“some_variable”。您可以在 typings.d.ts 文件中声明它们以便识别它们。

    declare const some_variable: string
    

    您始终可以拥有一个 Web 服务,该服务也可以通过 api 调用为您提供这些变量。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-18
    • 1970-01-01
    • 2016-04-17
    • 1970-01-01
    • 2012-08-09
    • 1970-01-01
    相关资源
    最近更新 更多