--ng build --env = prod no funciona

39

Estoy usando angular4 (4.4.6) y CLI 1.4.3. Intenté crear variables de entorno como en este artículo: https://alligator.io/angular/environment-variables/

Terminé con 3 archivos: environment.ts

export const environment = {
  production: false,
  restUrl: 'http://localhost:3000/',
  socketUrl: 'http://localhost:2000'
};

environment.prod.ts

export const environment = {
  production: true,
  restUrl: 'http://139.130.4.5:3000/',
  socketUrl: 'http://139.130.4.5:2000'
};

y environment.staging.ts

export const environment = {
  production: true,
  restUrl: 'http://139.130.4.5:3000/',
  socketUrl: 'http://139.130.4.5:2000'
};

Los uso de la siguiente manera:

import { environment } from '../../environments/environment';
 constructor() {
    this.serverUrl = environment.restUrl;
    console.log('the env is:' this.serverUrl');
  }

y en .angular-cli.json tengo lo siguiente:

"environmentSource": "environments/environment.ts",
      "environments": {
        "dev": "environments/environment.ts",
        "prod": "environments/environment.prod.ts",
        "staging": "environments/environment.staging.ts"
      }

y por alguna razón, cuando lo ejecuto ng build --env=prodcompila y todo, pero el producto final usa las variables de entorno localHost (dev).

lo que es aún más extraño es que cuando lo uso ng server --env=prodfunciona perfectamente, con variables de producción.

¿Por qué está pasando esto? ¿Cómo puedo construir con variables de entorno prod o de ensayo?

2
  • @ Efim, estoy enfrentando el mismo problema con Angular 5, ninguna de las siguientes soluciones funcionó para mí :(, ¿Tienes alguna solución para la versión 5?
    Abilash
    11 de septiembre de 2019 a las 4:20
  • @Efim, ¿alguna vez encontró una solución para este problema?
    Devner
    2/11/19 a las 7:57
50

Use un comando como este para que Anuglar 6 construya

ng build --prod --configuration=dev

O usando alias:

ng build --prod --c=dev
2
  • 4
    esto no apunta al archivo de entorno, sino a la entrada de configuración en el archivo angular.json
    Ayyash
    11/01/19 a las 10:41
  • 3
    Sin embargo, tiene el mismo propósito. Tendría que agregar reemplazos de archivos en el angular.jsonarchivo de configuración (que debería crearse automáticamente cuando migre a Angular 6). 14 feb 2019 a las 19:12
17

Angular 7+ (8/9/10) - a través del proyecto creado por CLI:

ng build --prod --configuration production

9

Intente configurar su entorno de destino también así:

ng build --target=production --environment=prod
o
ng build --prod --env=prod
o
ng build --prod

según https://github.com/angular/angular-cli/wiki/build , el destino de desarrollo se utiliza de forma predeterminada.

1
  • La cuestión es que AÚN no estoy listo para la producción, Angular no está satisfecho con los archivos inútiles (que se usarían en el futuro). 9 de enero de 2018 a las 8:15
6

Este era un problema antiguo que se solucionó en las versiones más recientes de cli. Sin embargo, no puedo decir si esto es todo sin saber qué versiones cli y @angular minor y de parche está utilizando.

Intente agregar ./a su. angular-cli.jsonenvs.

"environments": {
    "dev": "./environments/environment.ts",
    "prod": "./environments/environment.prod.ts",
    "staging": "./environments/environment.staging.ts"
}

Si esto lo soluciona, le recomiendo que actualice sus dependencias y su cli a la última versión y sus paquetes angulares a las últimas versiones 4.minor.patch para evitar encontrarse con otros errores ya corregidos.

1
  • 1
    la corrección './' no funcionó, uso Angular 4.4.6 y CLI 1.4.3 9 de enero de 2018 a las 8:20
1

Asegúrese de que las importaciones sean correctas en sus respectivos componentes. Importar el archivo de entorno incorrecto por error también podría causar este problema. En mi caso tuve la importación así:

import { environment } from '../../../../environment/environment.dev'; 

Esto nos confundió a muchos de nosotros hasta que lo descubrimos, ya que nunca miramos las importaciones. Debemos importar el archivo environment.ts solo entonces solo puede usar el archivo reemplazado. La importación corregida se verá así:

import { environment } from 'src/environments/environment';
0

Intente usar el siguiente comando

ng build -prod