我已运行以下命令在我的angular应用程序中为生产环境禁用控制台日志。下面的代码可以像chrome一样正常工作,但是,它仍然显示IE 11中的日志。
main.ts
if (environment.production) {
enableProdMode();
if(window){
window.console.log=function(){};
}
}
这是一个polyfill问题吗?我无法在网上找到任何相关信息。
编辑
此question似乎很相似,但没有解决我的问题,为什么在Chrome中可以覆盖控制台日志功能为空白方法,而在IE 11中却不能。
答案 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");
这样,您可以轻松地防止日志记录。