Como habilitar o modo de produção?

182

Eu estava lendo perguntas relacionadas e encontrei essa , mas minha pergunta é como alternar do modo de desenvolvimento para o modo de produção. Existem algumas diferenças entre os modos que são apontados aqui .

No console, eu posso ver. ....Call enableProdMode() to enable the production mode.No entanto, não tenho certeza de qual instância devo chamar esse método.

Alguém pode responder a esta pergunta?

Anjo anjo
fonte
Achei configuração passagem louco usando Webpack 2+ Angular2 e Typescript, criou uma solução simples: github.com/Sweetog/yet-another-angular2-boilerplate
Brian Ogden

Respostas:

212

Você o habilita importando e executando a função (antes de chamar o bootstrap):

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

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

Mas esse erro é um indicador de que algo está errado com suas ligações, então você não deve apenas descartá-lo, mas tentar descobrir por que isso está acontecendo.

Sasxa
fonte
Como habilitarProdMode () se você não estiver usando texto datilografado? Se eu chamar esse método antes ng.platform.browser.bootstrap (...) eu recebo este erro: enableProdMode não é definido
Daniel Dudas
2
@DanielDudas Eu não uso es5, mas tente #ng.core.enableProdMode()
Sasxa
3
Eu acredito que "angular2 / core" é agora "@ angular / core". Veja minha resposta abaixo.
Adampasz
Estou usando o Ionic2. Em qual arquivo esse bootstrap é chamado? Quando eu gero um exemplo de aplicativo ionic start test sidemenu --v2 --ts, vejo app.tsmas onde é chamada essa função de inicialização?
Guus 24/05
1
Fiz o mesmo, mas estou recebendo uma exceção como "Não é possível ativar o modo de produção após a configuração da plataforma". Alguém poderia me ajudar a resolver isso?
Gowtham
81

A melhor maneira de ativar o modo de produção para um aplicativo Angular 2 é usar o angular-cli e criar o aplicativo ng build --prod. Isso criará o aplicativo com perfil de produção. O uso do angular-cli tem o benefício de poder usar o modo de desenvolvimento usando ng serveou ng builddurante o desenvolvimento sem alterar o código o tempo todo.

Matthias B
fonte
6
Estou usando o Angular 6 e é ng build --prod para compilar no modo prod. Basta colocar isso aqui para todos os recém-chegados que visitam esta página.
Verbose
Eu acho que o build --prod foi implementado mantendo isDevMode e enableProdMode em mente. Essa resposta deve ser marcado como a resposta
bubi
58

Isso funcionou para mim, usando a versão mais recente do Angular 2 (2.0.0-rc.1):

main.ts

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

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

Aqui está a referência de função de seus documentos: https://angular.io/api/core/enableProdMode

adampasz
fonte
1
@emp Estou surpreso que a documentação oficial do Angular enableProdModenão lhe diga onde você deveria chamá-lo.
Dai
55

Quando construí um novo projeto usando o angular-cli. Foi incluído um arquivo chamado environment.ts. Dentro deste arquivo há uma variável assim.

export const environment = {
  production: true
};

Então em main.ts você tem isso.

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);

Você poderia adicionar isso a um projeto não angular-cli, eu diria, porque enableProdMode () está sendo importado de @ angular / core.

howserss
fonte
Como isso funciona para a criação de não produtores? Presumo que, nesse caso, environment.ts seja ignorado, então você não recebe um erro de compilação tsc ao tentar importar o módulo?
Llasarov 08/12/16
@llasarov the environment.ts está apenas se comportando como um arquivo de configuração, no qual você pode ativar / desativar o modo de produção. O main.ts apenas chama o enableProdMode se for verdadeiro, portanto isso pode ser feito sem nenhum processo de compilação específico. Você também pode fazer selecionando registrando aqui, verificando se o logMode é de depuração, em seguida, o seu serviço logger personalizada fazendo um StackTrace detalhado mais apenas registrando um um forro
NitinSingh
13

Vá para src/enviroments/enviroments.tse ative o modo de produção

export const environment = {
  production: true
};

para Angular 2

Alexander Schmidt
fonte
10

Para ativar o modo de produção no angular 6.XX, basta ir para o arquivo de ambiente

Como este caminho

Seu caminho: project>\src\environments\environment.ts

Alterar production: falsede:

export const environment = {
  production: false
};

Para

export const environment = {
  production: true
};

insira a descrição da imagem aqui

Osama khodrog
fonte
8

Na maioria das vezes, o modo prod não é necessário durante o tempo de desenvolvimento. Portanto, nossa solução alternativa é ativá-lo apenas quando NÃO for localhost.

Nos navegadores, main.tsonde você define seu AppModule raiz:

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

Também isLocalpode ser usado para outros fins, como enableTracingpara o RouterModulemelhor rastreamento da pilha de depuração durante a fase dev.

LeOn - Han Li
fonte
6

Quando o comando ng build é usado, ele substitui o arquivo environment.ts

Por padrão, quando o comando ng build é usado, ele define o ambiente de desenvolvimento

Para usar o ambiente de produção, use o seguinte comando ng build --env = prod

Isso ativará o modo de produção e atualizará automaticamente o arquivo environment.ts

Waqas Saleem
fonte
1
Isso foi alterado na Angular CLI 6 para ng build --configuration=production(como padrão, usando o arquivo angular.json gerado pela CLI).
slasky
5

você pode usar no seu app.ts || arquivo main.ts

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

No arquivo environment.ts, defina a produção como true

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

Para aqueles que fazem o caminho de atualização sem também mudar para o TypeScript, use:

ng.core.enableProdMode()

Para mim (em javascript), isso se parece com:

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

Você não precisa que nenhum arquivo environment.ts ou esse arquivo seja fornecido pelo seu projeto inicial. Basta ter um configuration.ts e adicionar todas as entradas que requerem decisão de tempo de execução (exemplo: - configuração de log e URLs). Isso caberá em qualquer estrutura de design e também ajudará no futuro

configuration.ts

export class Configuration {

   isInProductionMode : bool = true;

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

// Agora use no seu código de inicialização (main.ts ou equivalente, conforme o design do projeto inicial)

import { Configuration } from './configuration';
import { enableProdMode } from '@angular/core';
....
if (Configuration.isInProductionMode)
    enableProdMode();
NitinSingh
fonte
1
como você diferencia prod / dev de que isso isInProductionModeé verdadeiro / falso? no tempo de construção?
Leão - Han Li
Normalmente, como um parâmetro GULP ou equivalente
NitinSingh
O JSON tem a seguinte entrada: - "environmentSource": "environment / environment.ts", "environment": {"dev": "environment / environment.ts", "prod": "environment / environment.prod.ts" }
NitinSingh
4

ng build --prod substitui environment.ts por environment.prod.ts

ng build --prod

Mahmoudi MohamedAmine
fonte
0

Meu projeto Angular 2 não tem o arquivo "main.ts" mencionado outras respostas, mas possui um arquivo " boot.ts ", que parece ser a mesma coisa. (A diferença provavelmente se deve a diferentes versões do Angular.)

Adicionar essas duas linhas após a última importdiretiva em "boot.ts" funcionou para mim:

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