<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Livia Helen</title>
    <description>The latest articles on DEV Community by Livia Helen (@livia_helen_8bdd0b6b2950d).</description>
    <link>https://dev.to/livia_helen_8bdd0b6b2950d</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3154482%2F3cf5a96e-a883-4a95-82f7-18c2700a9930.jpg</url>
      <title>DEV Community: Livia Helen</title>
      <link>https://dev.to/livia_helen_8bdd0b6b2950d</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/livia_helen_8bdd0b6b2950d"/>
    <language>en</language>
    <item>
      <title>Configurando Múltiplos Ambientes no Angular</title>
      <dc:creator>Livia Helen</dc:creator>
      <pubDate>Thu, 19 Jun 2025 22:22:51 +0000</pubDate>
      <link>https://dev.to/livia_helen_8bdd0b6b2950d/configurando-multiplos-ambientes-no-angular-2fp7</link>
      <guid>https://dev.to/livia_helen_8bdd0b6b2950d/configurando-multiplos-ambientes-no-angular-2fp7</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp7gtihemo4xcytbbkj5g.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp7gtihemo4xcytbbkj5g.jpeg" alt="Logo do framework Angular atualizado" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Atenção&lt;/strong&gt;: Este artigo foi escrito em Junho de 2025, o projeto apresentado abaixo foi construído na versão 19 do Angular.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;O artigo apresenta uma ideia geral de como é possível configurar múltiplos ambientes no Angular dinamicamente.&lt;/p&gt;

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

&lt;h2&gt;
  
  
  Criando um novo projeto
&lt;/h2&gt;

&lt;p&gt;Considerando que o &lt;code&gt;Angular CLI&lt;/code&gt; está instalado globalmente, vamos criar um novo projeto rodando o comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ng new my-project
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Configurando o Environment
&lt;/h2&gt;

&lt;p&gt;Para criar o arquivo de &lt;code&gt;environment&lt;/code&gt;, vamos rodar o seguinte comando dentro da pasta do projeto criado:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ng generate environments
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O resultado será essa estrutura:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;my-project/src/environments
└── environment.ts

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Para configurar múltiplos ambientes, vamos considerar aqui &lt;code&gt;development&lt;/code&gt;, &lt;code&gt;staging&lt;/code&gt; e &lt;code&gt;production&lt;/code&gt;, podemos copiar o arquivo &lt;code&gt;environment.ts&lt;/code&gt; e renomear. A estrutura esperada será essa:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;my-project/src/environments
└── environment.ts
└── environment.development.ts
└── environment.staging.ts

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Onde:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;environment.ts&lt;/code&gt; representa o ambiente de produção &lt;/li&gt;
&lt;li&gt;
&lt;code&gt;environment.development.ts&lt;/code&gt; representa o ambiente de desenvolvimento &lt;/li&gt;
&lt;li&gt;
&lt;code&gt;environment.staging.ts&lt;/code&gt; representa o ambiente de homologação&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Configuração de cada arquivo de &lt;code&gt;environment&lt;/code&gt;
&lt;/h3&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;environment.ts&lt;/code&gt;
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;export const environment = {
  production: true,
  apiUrl: 'https://production.example.com',
};
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  &lt;code&gt;environment.staging.ts&lt;/code&gt;
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;export const environment = {
  production: false,
  apiUrl: 'http://staging.example.com',
};
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  &lt;code&gt;environment.development.ts&lt;/code&gt;
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;export const environment = {
  production: false,
  apiUrl: 'http://localhost:3000',
};
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Configurando o &lt;code&gt;package.json&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;Para conseguir rodar o &lt;code&gt;build&lt;/code&gt; de cada ambiente e também rodar o projeto em diferentes ambientes localmente, precisamos adicionar os &lt;code&gt;scripts&lt;/code&gt; dentro do &lt;code&gt;package.json&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "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": {
    ...
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Configurando o &lt;code&gt;angular.json&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;No &lt;code&gt;angular.json&lt;/code&gt; é preciso, dentro do &lt;code&gt;configurations&lt;/code&gt; que está dentro do &lt;code&gt;architect&lt;/code&gt; , definir o &lt;code&gt;fileReplacements&lt;/code&gt; de cada ambiente.&lt;/p&gt;

&lt;p&gt;O &lt;code&gt;fileReplacements&lt;/code&gt; permite que, ao realizar o &lt;code&gt;build&lt;/code&gt;, o arquivo padrão de &lt;code&gt;environment.ts&lt;/code&gt; seja automaticamente &lt;strong&gt;substituído pelo arquivo de ambiente informado&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;No nosso exemplo, temos os ambientes de &lt;code&gt;development&lt;/code&gt;, &lt;code&gt;staging&lt;/code&gt; e &lt;code&gt;production&lt;/code&gt;. Então, o &lt;code&gt;configurations&lt;/code&gt; ficaria assim:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"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"
         }
     ]
   },
},
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Atenção&lt;/strong&gt;: Como o arquivo &lt;code&gt;environment.ts&lt;/code&gt;, representa o ambiente de produção e ele é o arquivo padrão, não precisamos substituir ele por nenhum arquivo.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Configurando o &lt;code&gt;serve&lt;/code&gt;
&lt;/h3&gt;

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

&lt;p&gt;O &lt;code&gt;serve&lt;/code&gt; após configurar o &lt;code&gt;buildTarget&lt;/code&gt;, deve ficar desse jeito:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"serve": {
  "configurations": {
     "production": {
          "buildTarget": "my-project:build:production"
      },
      "staging": {
           "buildTarget": "my-project:build:staging"
       },
      "development": {
           "buildTarget": "my-project:build:development"
       }
   },
      "defaultConfiguration": "development"
},
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Configurando o componente para visualizar o ambiente
&lt;/h2&gt;

&lt;p&gt;Para visualizar qual ambiente está sendo utilizado, no arquivo &lt;code&gt;app.component.ts&lt;/code&gt;, podemos importar o &lt;code&gt;environment&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;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;
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No template, podemos adicionar um título e um parágrafo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;main&amp;gt;
  &amp;lt;section&amp;gt;
    &amp;lt;h1&amp;gt;Angular environment&amp;lt;/h1&amp;gt;
    &amp;lt;p&amp;gt;Api URL: {{ apiUrl }}&amp;lt;/p&amp;gt;
  &amp;lt;/section&amp;gt;
&amp;lt;/main&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Rodando o projeto em diferentes ambientes
&lt;/h2&gt;

&lt;p&gt;Para rodar o projeto nos ambientes de desenvolvimento, staging ou produção, rodamos os seguintes comandos:&lt;/p&gt;

&lt;p&gt;Ambiente de &lt;code&gt;development&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm run start:dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffck0ax9khmig6aq2xrkh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffck0ax9khmig6aq2xrkh.png" alt="Imagem do ambiente rodando em desenvolvimento" width="800" height="530"&gt;&lt;/a&gt;&lt;br&gt;
Ambiente de &lt;code&gt;staging&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm run start:staging
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foq68j1f472afiza8cb68.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foq68j1f472afiza8cb68.png" alt="Imagem do ambiente rodando em homologação" width="800" height="564"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ambiente de &lt;code&gt;production&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm run start:production
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F32uqge40fixdy8qxaezb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F32uqge40fixdy8qxaezb.png" alt="Imagem do ambiente rodando em produção" width="800" height="619"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Conhecimento adicional
&lt;/h2&gt;

&lt;p&gt;É possível integrar os arquivos de ambiente com CI/CD, como o &lt;code&gt;GitHub Actions&lt;/code&gt;, por exemplo.&lt;/p&gt;

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

</description>
      <category>angular</category>
      <category>githubactions</category>
      <category>braziliandevs</category>
    </item>
  </channel>
</rss>
