如何启用生产模式?


182

我正在阅读相关问题,发现了这个问题,但是我的问题是如何从开发模式切换到生产模式。此处指出的模式之间存在一些差异。

在控制台中,我可以看到....Call enableProdMode() to enable the production mode.但是,我不确定应该在哪种类型的实例上调用该方法。

有人可以回答这个问题吗?


我发现使用Webpack 2+ Angular2和Typescript进行疯狂的配置传递,创建了一个简单的解决方案:github.com/Sweetog/yet-another-angular2-boilerplate
Brian Ogden

Answers:


211

您可以通过导入和执行功能来启用它(在调用引导程序之前):

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

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

但是此错误表明绑定有问题,因此您不应该只是取消它,而要弄清楚它为什么发生。


如果您不使用打字稿,如何启用ProdMode()?如果我只是在ng.platform.browser.bootstrap(...)之前调用此方法,则会收到此错误:未定义enableProdMode
Daniel Dudas

2
@DanielDudas我不使用es5,而是尝试ng.core.enableProdMode()
Sasxa

3
我相信“ angular2 / core”现在是“ @ angular / core”。请参阅下面的答案。
adampasz

我正在使用Ionic2。该引导程序在哪个文件中调用?当我生成示例应用程序时,ionic start test sidemenu --v2 --ts我看到了,app.ts但是这个引导函数在哪里调用?
Guus

1
我做了同样的事情,但是出现了类似“平台设置后无法启用产品模式”的异常。有人可以帮我解决这个问题吗?
Gowtham '17

81

为Angular 2应用程序启用生产模式的最佳方法是使用angular-cli并使用构建应用程序ng build --prod。这将使用生产配置文件构建应用程序。使用angular-cli的好处是能够在开发时使用ng serveng build在开发时使用开发模式,而无需始终更改代码。


6
我正在使用Angular 6,它是ng build --prod以prod模式构建。只需将其放在此处,以供任何访问此页面的新手使用。
详细

我认为在实现build --prod时要牢记isDevMode和enableProdMode。该答案应标记为答案
bubi


55

当我使用angular-cli建立新项目时。其中包含一个名为environment.ts的文件。在此文件内部是一个像这样的变量。

export const environment = {
  production: true
};

然后在main.ts中,您拥有了这个。

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

我假设您可以将其添加到非angular-cli项目中,因为enableProdMode()是从@ angular / core导入的。


非产品构建如何工作?我假设在这种情况下,environment.ts被忽略了,所以在尝试导入模块时不会出现tsc编译错误吗?
llasarov

@llasarov environment.ts就像一个配置文件,您可以在其中打开/关闭生产模式。如果main.ts为true,则仅调用enableProdMode,因此无需任何特定的构建过程即可完成。您也可以在此处选择记录,方法是检查logMode是否为debug,然后您的自定义记录器服务执行详细的StackTrace,否则仅记录一个衬套
NitinSingh


10

要在角度6.XX中启用生产模式,只需转到环境文件

喜欢这条路

您的路径: project>\src\environments\environment.ts

更改production: false自:

export const environment = {
  production: false
};

export const environment = {
  production: true
};

在此处输入图片说明


8

在开发期间,大多数时候不需要prod模式。因此,我们的解决方法是仅在本地主机时启用它。

在浏览器main.ts中定义根AppModule的位置:

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

isLocal也可用于其他目的,如enableTracing用于RouterModule在开发阶段更好的调试堆栈跟踪。


6

使用ng build命令时,它将覆盖environment.ts文件

默认情况下,使用ng build命令设置开发环境

为了使用生产环境,请使用以下命令ng build --env = prod

这将启用生产模式并自动更新environment.ts文件


1
在Angular CLI 6中将其更改为ng build --configuration=production(默认情况下使用CLI生成的angular.json文件)。
slasky

5

您可以在您的app.ts中使用|| main.ts文件

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

4

对于那些在不升级到TypeScript的情况下进行升级的人,请使用:

ng.core.enableProdMode()

对我来说(使用javascript)如下所示:

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

4

您不需要种子项目提供任何environment.ts或此类文件。只需有一个configuration.ts,然后添加所有需要运行时决策的条目(例如:-记录配置和URL)。这将适合任何设计结构,并在将来有所帮助

配置文件

export class Configuration {

   isInProductionMode : bool = true;

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

//现在在启动代码中使用(根据种子项目设计,main.ts或等效代码

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

1
您如何区分prod / dev与isInProductionModetrue / false?在构建时间?
LeOn-Han Li

通常作为GULP参数或等效
NitinSingh

JSON的条目如下:-“ environmentSource”:“ environments / environment.ts”,“ environments”:{“ dev”:“ environments / environment.ts”,“ prod”:“ environments / environment.prod.ts” }
NitinSingh's



0

我的Angular 2项目没有提到其他答案的“ main.ts”文件,但确实有一个“ boot.ts ”文件,似乎差不多。(差异可能是由于Angular的版本不同。)

import在“ boot.ts”中的最后一个指令之后添加这两行对我来说很有效:

import { enableProdMode } from "@angular/core";
enableProdMode();
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.