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?


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.


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.


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


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.


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


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


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.


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


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

5

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

export const environment = {
  production: true
};

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

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

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


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();
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.