Comment activer le mode production?

182

Je lisais des questions connexes et j'ai trouvé celle-ci , mais ma question est de savoir comment passer du mode développement au mode production. Il existe quelques différences entre les modes qui sont indiqués ici .

Dans la console, je peux voir ....Call enableProdMode() to enable the production mode.Cependant, je ne suis pas sûr de quel type dois-je appeler cette méthode.

Quelqu'un peut-il répondre à cette question?

Ange ange
la source
Je l'ai trouvé fou en passant la configuration à l'aide de Webpack 2+ Angular2 et Typescript, j'ai créé une solution simple: github.com/Sweetog/yet-another-angular2-boilerplate
Brian Ogden

Réponses:

212

Vous l'activez en important et en exécutant la fonction (avant d'appeler bootstrap):

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

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

Mais cette erreur indique que quelque chose ne va pas avec vos liaisons, vous ne devriez donc pas simplement l'ignorer, mais essayer de comprendre pourquoi cela se produit.

Sasxa
la source
Comment activerProdMode () si vous n'utilisez pas dactylographié? Si j'appelle simplement cette méthode avant ng.platform.browser.bootstrap (...) j'obtiens cette erreur: enableProdMode n'est pas défini
Daniel Dudas
2
@DanielDudas Je n'utilise pas es5, mais essayezng.core.enableProdMode()
Sasxa
3
Je crois que "angular2 / core" est maintenant "@ angular / core". Voir ma réponse ci-dessous.
adampasz
J'utilise Ionic2. Dans quel fichier s'appelle ce bootstrap? Lorsque je génère un exemple d'application, ionic start test sidemenu --v2 --tsje vois app.tsmais où cette fonction d'amorçage est-elle appelée?
Guus
1
J'ai fait la même chose mais j'obtiens une exception comme "Impossible d'activer le mode prod après l'installation de la plate-forme". Quelqu'un pourrait-il m'aider à résoudre ce problème?
Gowtham
81

La meilleure façon d'activer le mode production pour une application Angular 2 est d'utiliser angular-cli et à créer l'application avec ng build --prod. Cela créera l'application avec un profil de production. L'utilisation d'angular-cli a l'avantage de pouvoir utiliser le mode de développement en utilisant ng serveou ng buildpendant le développement sans modifier le code en permanence.

Matthias B
la source
6
J'utilise Angular 6 et c'est ng build --prod pour construire en mode prod. Il suffit de mettre ceci ici pour tous les nouveaux arrivants visitant cette page.
Verbose du
Je pense que build --prod a été implémenté en gardant à l'esprit isDevMode et enableProdMode. Cette réponse doit être marquée comme la réponse
bubi
58

Cela a fonctionné pour moi, en utilisant la dernière version d'Angular 2 (2.0.0-rc.1):

main.ts

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

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

Voici la référence de la fonction tirée de leur documentation: https://angular.io/api/core/enableProdMode

Adampasz
la source
1
@emp Je suis surpris que la documentation officielle d'Angular enableProdModene vous dise pas vous êtes censé l'appeler.
Dai
55

Quand j'ai construit un nouveau projet en utilisant angular-cli. Un fichier a été inclus appelé environment.ts. À l'intérieur de ce fichier se trouve une variable comme celle-ci.

export const environment = {
  production: true
};

Ensuite, dans main.ts, vous avez ceci.

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

Vous pouvez l'ajouter à un projet non angular-cli, je suppose, car enableProdMode () est importé depuis @ angular / core.

howserss
la source
Comment cela fonctionne-t-il pour les versions non prod? Je suppose que dans ce cas, environment.ts est ignoré, alors n'obtenez-vous pas une erreur de compilation tsc lorsque vous essayez d'importer le module?
llasarov
@llasarov l'environnement.ts se comporte simplement comme un fichier de configuration, dans lequel vous pouvez activer / désactiver le mode production. Le main.ts appelle simplement le enableProdMode si c'est vrai, donc cela peut être fait sans aucun processus de construction spécifique. Vous pouvez également sélectionner la journalisation ici, en vérifiant si le logMode est débogué, puis votre service de journalisation personnalisé effectuant un StackTrace détaillé, sinon en enregistrant simplement une seule ligne
NitinSingh
13

Accédez au src/enviroments/enviroments.tsmode production et activez-le

export const environment = {
  production: true
};

pour Angular 2

Alexander Schmidt
la source
10

Pour activer le mode de production en angulaire 6.XX Il suffit d'aller dans le fichier d'environnement

Comme ce chemin

Ton chemin: project>\src\environments\environment.ts

Changement production: falsede:

export const environment = {
  production: false
};

À

export const environment = {
  production: true
};

entrez la description de l'image ici

Oussama Khodrog
la source
8

La plupart du temps, le mode prod n'est pas nécessaire pendant le développement. Notre solution de contournement consiste donc à l'activer uniquement lorsque ce n'est PAS localhost.

Dans votre navigateur main.tsoù vous définissez votre AppModule racine:

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

Le isLocalpeut également être utilisé à d'autres fins comme enableTracingpour RouterModuleune meilleure trace de la pile de débogage pendant la phase de développement.

LeOn - Han Li
la source
6

Lorsque la commande ng build est utilisée, elle écrase le fichier environment.ts

Par défaut, lorsque la commande ng build est utilisée, elle définit l'environnement de développement

Afin d'utiliser l'environnement de production, utilisez la commande suivante ng build --env = prod

Cela activera le mode production et mettra automatiquement à jour le fichier environment.ts

Waqas Saleem
la source
1
Cela a été changé dans Angular CLI 6 en ng build --configuration=production(par défaut à l'aide du fichier angular.json généré par CLI).
slasky
5

vous pouvez utiliser dans votre app.ts || fichier main.ts

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

Dans le fichier environment.ts, définissez la production sur true

export const environment = {
  production: true
};
Vinodh Ram
la source
Vraiment EZ: P TY pour ...!
Carlos Galeano
4

Pour ceux qui effectuent le chemin de mise à niveau sans passer également à TypeScript, utilisez:

ng.core.enableProdMode()

Pour moi (en javascript), cela ressemble à:

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

Vous n'avez pas besoin de fournir un fichier environment.ts ou un tel fichier par votre projet d'amorçage. Ayez simplement un fichier configuration.ts et ajoutez toutes ces entrées qui nécessitent une décision d'exécution (exemple: - configuration de journalisation et URL). Cela s'intégrera dans n'importe quelle structure de conception et aidera également à l'avenir

configuration.ts

export class Configuration {

   isInProductionMode : bool = true;

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

// Maintenant, utilisez dans votre code de démarrage (main.ts ou équivalent selon la conception du projet d'amorçage

import { Configuration } from './configuration';
import { enableProdMode } from '@angular/core';
....
if (Configuration.isInProductionMode)
    enableProdMode();
NitinSingh
la source
1
comment différenciez-vous prod / dev avec qui isInProductionModeest vrai / faux? dans le temps de construction?
LeOn - Han Li
Habituellement en tant que paramètre GULP ou équivalent
NitinSingh
Le JSON a une entrée comme suit: - "environmentSource": "environnements / environment.ts", "environnements": {"dev": "environnements / environment.ts", "prod": "environnements / environment.prod.ts" }
NitinSingh
4

ng build --prod remplace environment.ts par environment.prod.ts

ng build --prod

Mahmoudi MohamedAmine
la source
0

Mon projet Angular 2 n'a pas le fichier "main.ts" mentionné d'autres réponses, mais il a un fichier " boot.ts ", qui semble être à peu près la même chose. (La différence est probablement due aux différentes versions d'Angular.)

L'ajout de ces deux lignes après la dernière importdirective dans "boot.ts" a fonctionné pour moi:

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