如何检查 Angular 应用程序 运行 是否处于生产或开发模式

How to check if Angular application running in Production or Development mode

这看起来很简单,但我找不到任何解决方案。

那么,如何检查我的应用程序 运行 处于生产模式还是开发模式?

你可以使用这个功能isDevMode

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

...
export class AppComponent { 
  constructor() {
    console.log(isDevMode());
  }
}

注意事项注意这个功能

if(isDevMode()) {
  enableProdMode();
}

您将获得

Error: Cannot enable prod mode after platform setup

其他选项

环境变量

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') {
  //
}

这取决于你问什么...

如果你想知道Angular的mode,正如@yurzui所说,你需要调用{ isDevMode } from @angular/core,但它可以return 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);

根据 https://angular.io/guide/deployment#enable-production-mode 上的 Angular 部署指南:

Building for production (or appending the --environment=prod flag) enables production mode Look at the CLI-generated main.ts to see how this works.

main.ts 具有以下内容:

import { environment } from './environments/environment';

if (environment.production) {
  enableProdMode();
}

所以检查 environment.production 看看你是否在生产中。

很可能您不想调用 isDevMode()。根据 Angular API 文档 https://angular.io/api/core/isDevMode:

After called once, the value is locked and won't change any more... By default, this is true, unless a user calls enableProdMode before calling this.

我发现从 ng build --prod 构建中调用 isDevMode() 总是 returns 正确并且总是将您锁定在 运行 开发模式。相反,请检查 environment.production 以查看您是否在生产中。然后你将停留在生产模式。

您应该小心检查 isDevMode() 函数的 return 值。

我的设置失败了,因为我正在检查是否存在:if (isDevMode) 总是 true,即使在生产中也是如此,因为我用 import { isDevMode } from '@angular/core'; 声明了它。

if (isDevMode()) return 正确 false

只需检查环境文件中存在的生产变量,生产模式为真,开发模式为假。

import { environment } from 'src/environments/environment';

if (environment.production) {
  // for production
} else {
  // for development
}