Come abilitare la modalità di produzione?


182

Stavo leggendo domande correlate e ho trovato questo , ma la mia domanda è come posso passare dallo sviluppo alla modalità di produzione. Vi sono alcune differenze tra le modalità indicate qui .

Nella console posso vedere ....Call enableProdMode() to enable the production mode.Tuttavia, non sono sicuro dell'istanza di quale tipo dovrei chiamare quel metodo.

Qualcuno può rispondere a questa domanda?


Ho trovato folle passare la configurazione usando Webpack 2+ Angular2 e Typescript, ho creato una soluzione semplice: github.com/Sweetog/yet-another-angular2-boilerplate
Brian Ogden

Risposte:


212

Lo si abilita importando ed eseguendo la funzione (prima di chiamare bootstrap):

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

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

Ma questo errore indica che qualcosa non va nei tuoi attacchi, quindi non dovresti semplicemente scartarlo, ma cerca di capire perché sta accadendo.


Come abilitareProdMode () se non si utilizza typescript? Se chiamo questo metodo prima di ng.platform.browser.bootstrap (...) Ottengo questo errore: enableProdMode non è definito
Daniel Dudas

2
@DanielDudas Non uso es5, ma provong.core.enableProdMode()
Sasxa

3
Credo che "angular2 / core" sia ora "@ angular / core". Vedi la mia risposta qui sotto.
adampasz,

Sto usando Ionic2. In quale file viene chiamato questo bootstrap? Quando creo un'app di esempio ionic start test sidemenu --v2 --tsvedo app.tsma dove si chiama questa funzione bootstrap?
Guus,

1
Ho fatto lo stesso ma ricevo un'eccezione come "Impossibile abilitare la modalità prod dopo l'installazione della piattaforma". Qualcuno potrebbe aiutarmi a risolvere questo problema?
Gowtham,

81

Il modo migliore per abilitare la modalità di produzione per un'applicazione Angular 2 è usare angular-cli e costruire l'applicazione con ng build --prod. Ciò genererà l'applicazione con il profilo di produzione. L'uso di angular-cli ha il vantaggio di poter usare la modalità di sviluppo usando ng serveo ng builddurante lo sviluppo senza alterare il codice in ogni momento.


6
Sto usando Angular 6 ed è build --prod per costruire in modalità prod. Metti questo qui per tutti i nuovi arrivati ​​che visitano questa pagina.
Verbose

Penso che build --prod sia stato implementato tenendo presente isDevMode e enableProdMode. Questa risposta dovrebbe essere contrassegnata come risposta
bubi


55

Quando ho costruito un nuovo progetto usando angular-cli. È stato incluso un file chiamato environment.ts. All'interno di questo file è presente una variabile come questa.

export const environment = {
  production: true
};

Quindi in main.ts hai questo.

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

Potrei aggiungere questo a un progetto non angular-cli, suppongo, perché enableProdMode () viene importato da @ angular / core.


Come funziona per build non prod? Presumo che in questo caso environment.ts sia ignorato, quindi non si ottiene un errore di compilazione tsc quando si tenta di importare il modulo?
llasarov,

@llasarov the environment.ts si sta comportando come un file di configurazione, in cui è possibile attivare / disattivare la modalità di produzione. Main.ts chiama solo enableProdMode se è vero, quindi questo può essere fatto senza alcun processo di compilazione specifico. Puoi anche fare la selezione della registrazione qui, controllando se il logMode è debug, quindi il tuo servizio di registrazione personalizzato esegue uno StackTrace dettagliato, semplicemente registrando un solo liner
NitinSingh

13

Vai a src/enviroments/enviroments.tse abilita la modalità di produzione

export const environment = {
  production: true
};

per Angular 2


10

Per abilitare la modalità di produzione in angolare 6.XX Basta andare al file di ambiente

Ti piace questo percorso

Il tuo percorso: project>\src\environments\environment.ts

Cambia production: falseda:

export const environment = {
  production: false
};

Per

export const environment = {
  production: true
};

inserisci qui la descrizione dell'immagine


8

La maggior parte delle volte la modalità prod non è necessaria durante il tempo di sviluppo. Quindi la nostra soluzione è di abilitarlo solo quando NON è localhost.

Nel browser in main.tscui definisci il tuo AppModule di root:

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

La isLocalpuò essere utilizzato anche per altri scopi, come enableTracingper la RouterModuleper meglio debug stack durante dev fase.


6

Quando viene utilizzato il comando ng build, sovrascrive il file environment.ts

Per impostazione predefinita, quando viene utilizzato il comando ng build, imposta l'ambiente dev

Per usare l'ambiente di produzione, usa il seguente comando ng build --env = prod

Ciò consentirà la modalità di produzione e aggiornerà automaticamente il file environment.ts


1
Questo è stato modificato in Angular CLI 6 in ng build --configuration=production(come impostazione predefinita utilizzando il file angular.json generato dalla CLI).
slasky,

5

è possibile utilizzare in app.ts || file main.ts

import {enableProdMode} from '@angular/core';
enableProdMode();
bootstrap(....);

5

Nel file environment.ts impostare la produzione su true

export const environment = {
  production: true
};

Davvero EZ: P TY per ...!
Carlos Galeano,

4

Per coloro che eseguono il percorso di aggiornamento senza passare a TypeScript utilizzare:

ng.core.enableProdMode()

Per me (in javascript) sembra che:

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

4

Non è necessario alcun ambiente.ts o tale file per essere fornito dal progetto seed. Basta avere un file configuration.ts e aggiungere tutte queste voci che richiedono una decisione di runtime (esempio: - registrazione della configurazione e degli URL). Ciò si adatta a qualsiasi struttura di progettazione e aiuta anche in futuro

configuration.ts

export class Configuration {

   isInProductionMode : bool = true;

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

// Ora usa nel tuo codice di avvio (main.ts o equivalente secondo il progetto del progetto seed

import { Configuration } from './configuration';
import { enableProdMode } from '@angular/core';
....
if (Configuration.isInProductionMode)
    enableProdMode();

1
come si differenzia prod / dev con quello isInProductionModecome vero / falso? nel tempo di costruzione?
LeOn - Han Li,

Di solito come un parametro GULP o equivalente
NitinSingh

JSON ha la voce seguente: - "environmentSource": "ambienti / ambiente.ts", "ambienti": {"dev": "ambienti / ambiente.ts", "prod": "ambienti / ambiente.prod.ts" }
NitinSingh,


0

Il mio progetto Angular 2 non ha il file "main.ts" menzionato altre risposte, ma ha un file " boot.ts ", che sembra avere più o meno la stessa cosa. (La differenza è probabilmente dovuta alle diverse versioni di Angular.)

Aggiungere queste due righe dopo l'ultima importdirettiva in "boot.ts" ha funzionato per me:

import { enableProdMode } from "@angular/core";
enableProdMode();
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.