在生产中禁用console.log()

时间:2018-12-11 23:17:12

标签: typescript internet-explorer angular5 angular-cli

我已运行以下命令在我的angular应用程序中为生产环境禁用控制台日志。下面的代码可以像chrome一样正常工作,但是,它仍然显示IE 11中的日志。

main.ts

if (environment.production) {
  enableProdMode();
if(window){
  window.console.log=function(){};
 }
}

这是一个polyfill问题吗?我无法在网上找到任何相关信息。

编辑

question似乎很相似,但没有解决我的问题,为什么在Chrome中可以覆盖控制台日志功能为空白方法,而在IE 11中却不能。

3 个答案:

答案 0 :(得分:1)

问题已得到回答,答案已被接受,但是我想向您展示一种在生产中禁用/关闭console.log的更好方法。 在 src / envirenmonts 下添加具有以下内容的 environment.ts

export const environment = {
  production: false,

  mode: 'Production'
} 

main.ts 中,导入 envirenmont const

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

现在添加以下代码段:

..

if (environment.production) {
      window.console.log = () => { }
}

platformBrowserDynamic().bootstrapModule(AppModule).then(ref => {
  ...
}).catch(err => console.error(err)); 

要尝试此操作,请在 app.component.ts 的构造函数中添加 console.log

...
@Component({
  selector: 'my-app',
  templateUrl: './app.component.html',
  styleUrls: [ './app.component.css' ]
})
export class AppComponent  {
  ...
  constructor() {    
    console.log('How to switch off logging in Production?')
  }
}

environment.production 切换为 true / false 以查看结果 这是工作中的stackblitz

答案 1 :(得分:0)

解决方案是将polyfill添加到您的polyfill.ts文件中

if(!window.console) {
 var console = {
  log : function(){},
  warn : function(){},
  error : function(){},
  time : function(){},
  timeEnd : function(){}
 }
}

答案 2 :(得分:0)

我在Utility.ts类中添加了自定义日志功能,如下所示

public static log(strValue: string) {
if (CoreService._env !== 'prod') {
  console.log(strValue);
}

}

其中_env变量在CoreService中定义并在app.component内部分配值,如下所示

this.coreService.env = environment.env;

在environment.ts文件中,按如下所示定义env

export const environment = { env: 'dev'} // for production it will be 'prod'

我的组件正在使用

Utility.log("Print the value");

这样,您可以轻松地防止日志记录。