Answers:
您可以使用此功能isDevMode
import { isDevMode } from '@angular/core';
...
export class AppComponent {
constructor() {
console.log(isDevMode());
}
}
注意事项:请谨慎使用此功能
if(isDevMode()) {
enableProdMode();
}
你会得到
错误:平台设置后无法启用产品模式
环境变量
import { environment } from 'src/environments/environment';
if (environment.production) {
//
}
通过webpack process.env.NODE_ENV变量注入
declare let process: any;
const env = process.env.NODE_ENV;
if (env === 'production') {
//
}
platformBrowserDynamic().bootstrapModule(AppModule);
根据Angular部署指南https://angular.io/guide/deployment#enable-production-mode:
为生产而构建(或附加--environment = prod标志)将启用生产模式。查看生成的CLI
main.ts
以查看其工作方式。
main.ts
具有以下内容:
import { environment } from './environments/environment';
if (environment.production) {
enableProdMode();
}
因此environment.production
,请检查您是否正在生产中。
最有可能您不想打电话isDevMode()
。根据Angular API文档https://angular.io/api/core/isDevMode:
一次调用后,该值将被锁定,并且不会再更改...默认情况下,这是正确的,除非用户在调用此方法之前调用enableProdMode。
我发现isDevMode()
从ng build --prod
构建调用总是返回true,并且总是将您锁定在开发模式下运行。相反,请检查environment.production
您是否正在生产中。然后,您将保持生产模式。
isDevMode()
则这是一种完美的方法那。
如果您想了解mode
Angular的知识(如@yurzui所说),则需要调用{ isDevMode } from @angular/core
它,但false
只有enableProdMode
在它之前调用才能返回。
如果您想了解构建环境,换句话说,如果您的应用程序是否运行在最小化状态,则需要在构建系统中设置一个构建变量... Webpack
例如,应使用definePlugin
。
https://webpack.github.io/docs/list-of-plugins.html#defineplugin
new webpack.DefinePlugin({
ENV_PRODUCTION: !!process.env.NODE_ENV
});
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'
import { enableProdMode } from '@angular/core';
import { AppModule } from './app.module'
platformBrowserDynamic().bootstrapModule(AppModule);
enableProdMode();
这是我的代码,所以我遇到了同样的错误。我只交换了3和4行。然后问题解决了。因此,在启动模块之前,我们应启用--prod模式。
正确的方式可以这样
enableProdMode()
platformBrowserDynamic().bootstrapModule(AppModule);
您应谨慎检查isDevMode()
函数的返回值。
我的设置失败是因为我正在检查存在性:if (isDevMode)
总是true
,甚至在生产中,因为我用声明了它import { isDevMode } from '@angular/core';
。
if (isDevMode())
false
正确返回。
ng build --prod=true
通过angular cli 构建您的应用
if ( isDevMode )
仅检查标识符isDevMode是否已定义,不为null,不为空也不为零。由于标识符是在@angular/core
其中定义的,因此if()将始终返回true。现在,if( isDevMode() )
实际上将调用该函数,并且无论是否处于开发环境中,它都将返回。
只需检查环境文件中存在的生产变量,则对于生产模式为true,对于开发为false。
import { environment } from 'src/environments/environment';
if (environment.production) {
// for production
} else {
// for development
}