DEV Community

Livia Helen
Livia Helen

Posted on

Configurando Múltiplos Ambientes no Angular

Logo do framework Angular atualizado

Atenção: Este artigo foi escrito em Junho de 2025, o projeto apresentado abaixo foi construído na versão 19 do Angular.

O artigo apresenta uma ideia geral de como é possível configurar múltiplos ambientes no Angular dinamicamente.

A estratégia utilizada tem como objetivo eliminar o esforço manual de alterar o ambiente e a URL. Com isso, também evitamos erros humanos ao realizar edições no arquivo de environment.

Criando um novo projeto

Considerando que o Angular CLI está instalado globalmente, vamos criar um novo projeto rodando o comando:

ng new my-project
Enter fullscreen mode Exit fullscreen mode

Configurando o Environment

Para criar o arquivo de environment, vamos rodar o seguinte comando dentro da pasta do projeto criado:

ng generate environments
Enter fullscreen mode Exit fullscreen mode

O resultado será essa estrutura:

my-project/src/environments
└── environment.ts

Enter fullscreen mode Exit fullscreen mode

Para configurar múltiplos ambientes, vamos considerar aqui development, staging e production, podemos copiar o arquivo environment.ts e renomear. A estrutura esperada será essa:

my-project/src/environments
└── environment.ts
└── environment.development.ts
└── environment.staging.ts

Enter fullscreen mode Exit fullscreen mode

Onde:

  • environment.ts representa o ambiente de produção
  • environment.development.ts representa o ambiente de desenvolvimento
  • environment.staging.ts representa o ambiente de homologação

Configuração de cada arquivo de environment

environment.ts

export const environment = {
  production: true,
  apiUrl: 'https://production.example.com',
};
Enter fullscreen mode Exit fullscreen mode

environment.staging.ts

export const environment = {
  production: false,
  apiUrl: 'http://staging.example.com',
};
Enter fullscreen mode Exit fullscreen mode

environment.development.ts

export const environment = {
  production: false,
  apiUrl: 'http://localhost:3000',
};
Enter fullscreen mode Exit fullscreen mode

Configurando o package.json

Para conseguir rodar o build de cada ambiente e também rodar o projeto em diferentes ambientes localmente, precisamos adicionar os scripts dentro do package.json.

{
  "name": "my-project",
  "version": "0.0.0",
  "scripts": {
    "start:dev": "ng serve --configuration=development",
    "start:prod": "ng serve --configuration=production",
    "start:staging": "ng serve --configuration=staging",
    "build:dev": "ng build --configuration=development",
    "build:staging": "ng build --configuration=staging",
    "build:prod": "ng build --configuration=production"
  },
  "dependencies": {
    ...
  },
  "devDependencies": {
    ...
  }
}
Enter fullscreen mode Exit fullscreen mode

Configurando o angular.json

No angular.json é preciso, dentro do configurations que está dentro do architect , definir o fileReplacements de cada ambiente.

O fileReplacements permite que, ao realizar o build, o arquivo padrão de environment.ts seja automaticamente substituído pelo arquivo de ambiente informado.

No nosso exemplo, temos os ambientes de development, staging e production. Então, o configurations ficaria assim:

"configurations": {
 "development": {
     "fileReplacements": [
         {
           "replace": "src/environments/environment.ts",
           "with": "src/environments/environment.development.ts"
         }
      ],
  },
  "staging": {
     "fileReplacements": [
         {
           "replace": "src/environments/environment.ts",
            "with": "src/environments/environment.staging.ts"
         }
     ]
   },
},
Enter fullscreen mode Exit fullscreen mode

Atenção: Como o arquivo environment.ts, representa o ambiente de produção e ele é o arquivo padrão, não precisamos substituir ele por nenhum arquivo.

Configurando o serve

Adicionalmente, dentro do arquivo angular.json podemos configurar dentro do configurations do serve o buildTarget, que permite rodar o ambiente de homologação e produção localmente utilizando os comandos definidos no package.json previamente.

O serve após configurar o buildTarget, deve ficar desse jeito:

"serve": {
  "configurations": {
     "production": {
          "buildTarget": "my-project:build:production"
      },
      "staging": {
           "buildTarget": "my-project:build:staging"
       },
      "development": {
           "buildTarget": "my-project:build:development"
       }
   },
      "defaultConfiguration": "development"
},
Enter fullscreen mode Exit fullscreen mode

Configurando o componente para visualizar o ambiente

Para visualizar qual ambiente está sendo utilizado, no arquivo app.component.ts, podemos importar o environment:

import { Component } from '@angular/core';
import { environment } from '../environments/environment';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrl: './app.component.scss'
})
export class AppComponent {
  apiUrl = environment.apiUrl;
}

Enter fullscreen mode Exit fullscreen mode

No template, podemos adicionar um título e um parágrafo:

<main>
  <section>
    <h1>Angular environment</h1>
    <p>Api URL: {{ apiUrl }}</p>
  </section>
</main>
Enter fullscreen mode Exit fullscreen mode

Rodando o projeto em diferentes ambientes

Para rodar o projeto nos ambientes de desenvolvimento, staging ou produção, rodamos os seguintes comandos:

Ambiente de development:

npm run start:dev
Enter fullscreen mode Exit fullscreen mode

Imagem do ambiente rodando em desenvolvimento
Ambiente de staging:

npm run start:staging
Enter fullscreen mode Exit fullscreen mode

Imagem do ambiente rodando em homologação

Ambiente de production:

npm run start:production
Enter fullscreen mode Exit fullscreen mode

Imagem do ambiente rodando em produção

Conhecimento adicional

É possível integrar os arquivos de ambiente com CI/CD, como o GitHub Actions, por exemplo.

Como conhecimento extra, vale a pena pesquisar e entender como configurar um workflow que, com base nas branches do repositório, define automaticamente o ambiente que deve ser utilizado :)

Top comments (5)

Collapse
 
bluniz profile image
Lucas Rosa

O artigo ficou muito bom!!! Show demais!

Collapse
 
danielhe4rt profile image
Daniel Reis

Ótimo artigo! Espero que mais pessoas que gostem de Angular vejam o conteúdo <3

Collapse
 
isaiasroberto0 profile image
isaias

Boom Demais!!!

Collapse
 
larissa_kruger profile image
Larissa Kruger

Show! Já salvei...

Collapse
 
franciscossjunior profile image
Francisco S S Junior

Parabéns,
Artigo simples, claro, objetivo e muito útil.
Poderia, se possível, escrever a continuação dele com base no conhecimento adicional que você sugeriu.