【问题标题】:change angular env variables at runtime在运行时更改角度环境变量
【发布时间】:2021-06-10 13:35:16
【问题描述】:

我希望能够更改我的 Angular 在构建时从服务器获取资源的 url。我会在构建期间传递一个参数来更改 url 值 背后的原因是为了部署在不同的 docker 容器中。

环境.docker.ts

export const environment = {
  ...
  url: "localhost:8080"
};

我想要类似:ng build --env docker --url:"localhost:9090",它将在构建期间更新默认值。

【问题讨论】:

    标签: angular npm angular-cli


    【解决方案1】:

    创建环境文件environment.prod.ts:

    export const environment = {
      production: true,
      apiUrl: '$BACKEND_URL'
    };
    

    运行ng build --prod true

    现在在运行之前,替换所有生成的html文件中的变量:

    cd dist;
    find . -type f -exec sed -i 's~\$BACKEND_URL~https://mybackend.domain.com~g' {} \;
    

    然后您可以在运行之前运行此替换命令,例如在运行 docker 容器之前在运行时

    PS:您只能在它替换“就地”变量后运行该命令,如果需要,请制作 dist 的备份副本。

    【讨论】:

      【解决方案2】:

      这已由 CLI 处理。

      假设你有几个环境:

      environment.ts
      environment.local.ts
      environment.docker.ts
      environment.prod.ts
      

      所有文件都必须导出相同的变量,但具有不同的值。这意味着您可以更改url 属性,但不能删除它。

      拥有这些环境后,打开您的angular-cli.json 文件。在 environments 属性下,添加您的环境:

      "environments": {
        "local": "environments/environment.local.ts",
        "docker": "environments/environment.docker.ts",
        "prod": "environments/environment.prod.ts"
      }
      

      现在,您可以使用您选择的环境进行构建:CLI 将使用正确的文件。

      $ ng build --env docker
      $ ng build --env local
      $ ng build --env prod
      

      【讨论】:

      • 使用ng build --env docker,我想更改url值;我想要ng build --env docker --url:"localhost:9090" 之类的东西,它将更新默认值;这样对于使用 docker 环境文件的不同构建,我可以为 url 设置不同的值
      • 所以你的应用应该有几个docker容器,每个容器应该有几个url?所以如果你有 4 个容器和每个容器 4 个 url,你最终会得到 16 个链接?
      • 可能!我想完全自定义服务器可以在容器中侦听的端口。同时,默认端口可能已被容器中的另一个服务使用。
      • 您有几种解决方案:1) 让用户更改 URL 2) 从后端获取 URL 3) 硬编码您的 URL 并在运行时切换。其中之一是你想做的吗?
      • (因为我没说,但是ng build --env docker --url:"localhost:9090"是不可能的)
      猜你喜欢
      • 1970-01-01
      • 2017-08-05
      • 2021-04-26
      • 2022-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多