No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Manejo de ambientes

12/23
Recursos

Los desarrolladores o desarrolladoras del Core de Angular ya pensaron en todos los problemas típicos que ocurren cuando programas en front-end. Uno de ellos es la posibilidad de diferenciar entre ambientes de un mismo proyecto.

Ambientes de Desarrollo y Producción

En tu proyecto de Angular encontrarás una carpeta llamada environments y por defecto con dos archivos dentro:

  • environments.ts
  • environments.prod.ts

Ambos lucen de manera muy similar.

// environments.ts
// This file can be replaced during build by using the `fileReplacements` array.
// `ng build` replaces `environment.ts` with `environment.prod.ts`.
// The list of file replacements can be found in `angular.json`.

export const environment = {
  production: false
};
// environments.prod.ts
export const environment = {
  production: true
};

Presta atención a los comentarios en el archivo environments.ts, pues explican como Angular, cuando compila la aplicación, se reemplaza por el correspondiente dependiendo del ambiente.

Busca en el archivo angular.json la propiedad fileReplacements:

// angular.json
"fileReplacements": [
  {
    "replace": "src/environments/environment.ts",
    "with": "src/environments/environment.prod.ts"
  }
],

Como claramente indica, el archivo environment.ts será reemplazado por environment.prod.ts al compilar la aplicación en modo producción.

Compilando en Modo Desarrollo y Producción

Cuando haces un ng serve, la aplicación se compila en modo desarrollo por defecto. Esta configuración también puedes cambiarla en el angular.json:

// angular.json
"serve": {
  ...
  "defaultConfiguration": "development"
},

Es equivalente a hacer un ng serve --configuration development.

Mientras que cuando haces un ng serve --configuration production se compila en modo producción y utilizará las variables de entorno que le corresponda.

De esta manera puedes manejar N cantidad de ambientes, cada uno con sus propias variables de entorno y su propia configuración dependiendo la necesidad.


Contribución creada por: Kevin Fiorentino.

Aportes 19

Preguntas 3

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

¿Dónde están mis environments?

Si, como yo, vienes del futuro donde existe Angular 15 y superiores, debes saber que el equipo de Angular ha hecho una labor de minimizar los archivos necesarios para crear una aplicación, por lo que varios archivos han desaparecido. Debido a esto, es posible que no encuentres el directorio environments que utiliza Nico en esta clase. Pero no te preocupes, aún puedes usarlo.
Para usar los ambientes lo que tendrás que hacer es agregarlos manualmente, lo que es bastante sencillo, te muestro cómo.

Creando tus ambientes

  1. Primero necesitas ubicarte en el directorio src de tu aplicación.
  2. Estando en src vas a crear un directorio nuevo llamado environments.
  3. En este nuevo directorio, vas a crear tus ambientes. Inicialmente se utilizan dos: desarrollo y producción. Como el de desarrollo es el ambiente por defecto, puedes nombrarlo environment.ts. Por su parte, al ambiente de producción lo llamarás environment.prod.ts.
  4. Puedes crear más ambientes si lo necesitas, por ejemplo, puedes tener un ambiente staging y lo nombrarías environment.staging.ts.
  5. Una vez creados, lo importante es la configuración que les des. La configuración más básica es tal que así:
export const environment = {
  production: false
};

Esta te puede servir para tu ambiente de desarrollo (environment.ts). Para tener un ambiente de producción (environment.prod.ts), solo hace falta cambiar la propiedad production a true. Así:

export const environment = {
  production: true
};
  1. A partir de aquí puedes agregar todas las configuración y variables que gustes, tal como muestra Nico.
  2. Por último, es importante notar que para que Angular sepa que quieres hacer un build con una determinada configuración, se lo debes indicar. Por ejemplo, para hacer un build para producción usaríamos:
ng build --prod

Y eso es todo, espero que les sirva este pequeño aporte 😁.

Recuerda que un PROXY creado en angular no corre en PRODUCCION solo en el ambiente de desarrollo

todo es cuestión de gustos.. pero angular me gusta más que react

Para que Angular sepa que estas en un ambiente de producción, debes compilar el proyecto con el comando:

ng build --prod

Si solo utilizas ng build, las variables de entorno no serán tomadas en cuenta.

Me ha gustado la forma en que Angular ha pensado en todas estas soluciones a problemas comunes de desarrollo.

Nota importante
Estas variables no serán tomadas en cuenta si solo haces un ng build; debes hacer un ng build --prod para crear un “build de producción”

Para Angular 15, el ambiente por defecto se cambió a producción, lo que significa que el build se genera directamente para productivo, por lo que se deben realizar alguna configuración adicionales para que se tomen los respectivos archivos environment para cada ambiente.

Por defecto el archivo de producción se llamaría environment.ts, mientras que el de desarrollo podría llamarse environment.dev.ts, lo importante viene cuando se realiza la configuración en el archivo angular.json donde se especifica, para cada ambiente, como se comporta el reemplazo de los respectivos archivos.

Por ejemplo, para el ambiente de desarrollo quedaría de la siguiente manera:

"development": {
	...
	"fileReplacements": [{
		"replace": "src/environments/environment.ts",
		"with": "src/environments/environment.dev.ts"
	}]
	...
}

Mientras que para la configuración de productivo no hay necesidad de configurar nada adicional, ya que su archivo environment.ts se toma por defecto.

Adjunto un artículo que amplía la información relacionada Angular 15: what happened to environment.ts

También adjunto otro artículo donde se ejemplifica una forma de manejar los datos que varían entre ambientes al momento de ejecución y no de compilación, como se hace con lo environments nativos de Angular: Runtime environment configuration with Angular

con ng generate environments se crea la carpeta environments con los archivos necesarios para los ambientes, solo tocaría poner production: true o production: false según se necesite y renombrar los archivos también si se quiere
https://angular.io/guide/build

Muchoénfasis en que solo funciona en desarrollo ya que nosotros desplegando nuestras apps no entendiamos porque no funcionaban jaja, hasta que vimos que era un problema de API Gateway de AWS

En las reglas del proxy para hacer peticiones a una API con restricciones de Cors si quiero trabajar desde local con el proxy solo debería colocar target: http//localhost y el puerto en el que trabajaré
¿?. Agradezco la respuesta compañeros 😄

Muy buena clase.

A Partir de angular 15 decidieron quitar esta opcion y tu podrías agregarlas manualmente o usar cualquier método para alternar urls entre ambientes. Pero si se desea generar esos archivos usar: `ng generate environments`
En Angular 16^ se puede crear la carpeta de **environments** desde el CLI, más detalles aquí ==> <https://angular.io/guide/build>

IMPORTANTE: Por ningun motivo se deberia incluir una API_KEY dentro de uno de estos archivos environment. Cualquier persona podria ver los detalles de la peticion en el navegador y asi averiguar su valor. Lo mas aconsejable seria tener un proxy server que reciba el request y luego ejecute la llamada a la API usando la clave desde el lado del backend

RECUERDEN:
El proxi no corre en Producción, solo en Desarrollo.

super interesante

Esta perfecto!