¿Cómo habilitar el modo de producción?

182

Estaba leyendo preguntas relacionadas y encontré esta , pero mi pregunta es cómo puedo cambiar del modo de desarrollo al modo de producción. Hay algunas diferencias entre los modos que se señalan aquí .

En la consola puedo ver ....Call enableProdMode() to enable the production mode.Sin embargo, no estoy seguro de qué tipo de llamada debo usar para ese método.

¿Alguien puede responder esta pregunta?

Ángel Ángel
fuente
Me pareció una configuración de paso loca usando Webpack 2+ Angular2 y Typecript, creé una solución simple: github.com/Sweetog/yet-another-angular2-boilerplate
Brian Ogden

Respuestas:

212

Lo habilita importando y ejecutando la función (antes de llamar a bootstrap):

import {enableProdMode} from '@angular/core';

enableProdMode();
bootstrap(....);

Pero este error es un indicador de que algo está mal con sus enlaces, por lo que no debe simplemente descartarlo, sino tratar de descubrir por qué está sucediendo.

Sasxa
fuente
¿Cómo habilitarProdMode () si no está usando el mecanografiado? Si solo llamo a este método antes de ng.platform.browser.bootstrap (...) me sale este error: enableProdMode no está definido
Daniel Dudas
2
@DanielDudas No uso es5, pero pruebang.core.enableProdMode()
Sasxa
3
Creo que "angular2 / core" es ahora "@ angular / core". Vea mi respuesta a continuación.
adampasz
Estoy usando Ionic2. ¿En qué archivo se llama este bootstrap? Cuando genero una aplicación de muestra ionic start test sidemenu --v2 --ts, veo, app.tspero ¿dónde se llama esta función de arranque?
Guus
1
Hice lo mismo pero recibo una excepción como "No se puede habilitar el modo de producción después de la configuración de la plataforma". ¿Alguien podría ayudarme a resolver esto?
Gowtham
81

La mejor manera de habilitar el modo de producción para una aplicación Angular 2 es usar angular-cli y construir la aplicación con ng build --prod. Esto construirá la aplicación con perfil de producción. Usar angular-cli tiene la ventaja de poder usar el modo de desarrollo usando ng serveo ng buildmientras se desarrolla sin alterar el código todo el tiempo.

Matthias B
fuente
66
Estoy usando Angular 6 y es ng build --prod para compilar en modo prod. Simplemente ponga esto aquí para cualquier recién llegado que visite esta página.
Detallado
Creo que build --prod se ha implementado teniendo en cuenta isDevMode y enableProdMode. Esta respuesta debe marcarse como la respuesta
bubi
58

Esto funcionó para mí, utilizando la última versión de Angular 2 (2.0.0-rc.1):

main.ts

import {enableProdMode} from '@angular/core';

enableProdMode();
bootstrap(....);

Aquí está la referencia de función de sus documentos: https://angular.io/api/core/enableProdMode

adampasz
fuente
1
@emp Me sorprende que la documentación oficial de Angular enableProdModeno te diga dónde se supone que debes llamarla.
Dai
55

Cuando construí un nuevo proyecto usando angular-cli. Se incluyó un archivo llamado environment.ts. Dentro de este archivo hay una variable como esta.

export const environment = {
  production: true
};

Luego en main.ts tienes esto.

import './polyfills.ts';
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import { enableProdMode } from '@angular/core';
import { environment } from './environments/environment';
import { AppModule } from './app/';

if (environment.production) {
  enableProdMode();
}

platformBrowserDynamic().bootstrapModule(AppModule);

Podría suponer esto a un proyecto no angular-cli, supongo, porque enableProdMode () se está importando desde @ angular / core.

howserss
fuente
¿Cómo funciona esto para la compilación no prod? Supongo que en ese caso se ignora environment.ts, así que ¿no obtiene un error de compilación tsc al intentar importar el módulo?
llasarov
@llasarov the environment.ts solo se comporta como un archivo de configuración, en el que puede activar / desactivar el modo de producción. Main.ts solo llama a enableProdMode si es verdadero, por lo que esto se puede hacer sin ningún proceso de compilación específico. También puede seleccionar el registro aquí, verificando si logMode está depurado y luego su servicio de registro personalizado haciendo un StackTrace detallado, de lo contrario solo registrando un trazador de líneas
NitinSingh
13

Ve src/enviroments/enviroments.tsy habilita el modo de producción

export const environment = {
  production: true
};

para Angular 2

Alexander Schmidt
fuente
10

Para habilitar el modo de producción en angular 6.XX Simplemente vaya al archivo de entorno

Como este camino

Tu camino: project>\src\environments\environment.ts

Cambiar production: falsede:

export const environment = {
  production: false
};

A

export const environment = {
  production: true
};

ingrese la descripción de la imagen aquí

Osama Khodrog
fuente
8

La mayoría de las veces el modo de producción no es necesario durante el tiempo de desarrollo. Entonces, nuestra solución es habilitarlo solo cuando NO sea localhost.

En los navegadores main.tsdonde define su AppModule raíz:

const isLocal: boolean = /localhost/.test(document.location.host);
!isLocal && enableProdMode();
platformBrowserDynamic().bootstrapModule(AppModule);

El isLocaltambién se puede utilizar para otros fines como enableTracingpara el RouterModulemejor seguimiento de la pila durante la depuración dev fase.

LeOn - Han Li
fuente
6

Cuando se usa el comando ng build, sobrescribe el archivo environment.ts

Por defecto, cuando se usa el comando ng build, establece el entorno de desarrollo

Para usar el entorno de producción, use el siguiente comando ng build --env = prod

Esto habilitará el modo de producción y actualizará automáticamente el archivo environment.ts

Waqas Saleem
fuente
1
Esto se cambió en Angular CLI 6 a ng build --configuration=production(por defecto, usando el archivo angular.json generado por CLI).
slasky
5

puedes usar en tu app.ts || archivo main.ts

import {enableProdMode} from '@angular/core';
enableProdMode();
bootstrap(....);
Samudrala Ramu
fuente
5

En el entorno.ts el archivo establece la producción en verdadero

export const environment = {
  production: true
};
Vinodh Ram
fuente
Realmente EZ: P TY para ...!
Carlos Galeano
4

Para aquellos que realizan la ruta de actualización sin cambiar también a TypeScript, use:

ng.core.enableProdMode()

Para mí (en javascript) esto se ve así:

var upgradeAdapter = new ng.upgrade.UpgradeAdapter();
ng.core.enableProdMode()
upgradeAdapter.bootstrap(document.body, ['fooApp']);
Ryan Crews
fuente
4

No necesita ningún entorno.ts o tal archivo para ser proporcionado por su proyecto semilla. Solo tenga un archivo configuration.ts y agregue todas las entradas que requieran una decisión de tiempo de ejecución (ejemplo: configuración de registro y URL). Esto encajará en cualquier estructura de diseño y también ayudará en el futuro

configuration.ts

export class Configuration {

   isInProductionMode : bool = true;

   // other configuration
   serviceUrl : string = "http://myserver/myservice.svc";
   logFileName : string = "...";
}

// Ahora úsalo en tu código de inicio (main.ts o equivalente según el diseño del proyecto semilla

import { Configuration } from './configuration';
import { enableProdMode } from '@angular/core';
....
if (Configuration.isInProductionMode)
    enableProdMode();
NitinSingh
fuente
1
¿Cómo diferencias prod / dev con que isInProductionModesea ​​verdadero / falso? en el tiempo de construcción?
LeOn - Han Li
Por lo general, como un parámetro GULP o equivalente
NitinSingh
El JSON tiene una entrada como la siguiente: - "environmentSource": "assets / environment.ts", "assets": {"dev": "assets / environment.ts", "prod": "assets / environment.prod.ts" }
NitinSingh
4

ng build --prod reemplaza environment.ts con environment.prod.ts

ng build --prod

Mahmoudi MohamedAmine
fuente
0

Mi proyecto Angular 2 no tiene el archivo "main.ts" mencionado en otras respuestas, pero sí tiene un archivo " boot.ts ", que parece ser casi lo mismo. (La diferencia probablemente se deba a las diferentes versiones de Angular).

Agregar estas dos líneas después de la última importdirectiva en "boot.ts" funcionó para mí:

import { enableProdMode } from "@angular/core";
enableProdMode();
Gyromite
fuente