2017-02-17 31 views
10

我正在使用MEAN,Angular 2,Node/Express,Angular-CLI和ng build --prod来构建我的应用程序,并且在整个我的应用程序中,我都有一段注释掉一次性代码和十亿次调试console.log语句的讽刺。有没有办法让构建过程在构建时删除所有注释和console.log语句?手动做这件事的想法是可怕的!用ng build剥离所有注释和console.logs --prod,可能吗?

+0

我想像的评论已经删除了,你看了看输出?但是,它应该如何知道哪些日志是功能性的,哪些只是调试? – jonrsharpe

+0

angular-cli使用引擎盖下的webpack,这在捆绑过程中已经在做JavaScript的一些修改。我相信有webpack的插件可以删除控制台日志记录以及在mangle过程中的注释,但我不知道如何将它与angular-cli同步。 – silencedmessage

回答

13

我有简单的修复。将这个代码main.ts

if(env === 'prod') { // assuming you have env variable configured 
    window.console.log = function(){}; 
} 
+1

大声笑好主意,问题是我有更多的console.log声明在我的服务器端代码:P感谢 – seanEd

+1

您也可以在服务器代码上做同样的事情。将该代码放在'server.js'中。不要附加到窗口,因为它不存在于节点env中。 – Sudhakar

+0

gr8的想法...你救了我的一天。 :) –

2

您可以使用ng lint--fix标志和tslint配置文件no-console规则。并将其挂接到包文件中的构建调用。

例如: ... "prebuild": "ng lint --fix", "build": "ng build -prod", ...

和构建应用程序

npm run build

裁判:https://github.com/angular/angular-cli/wiki/lint

+0

是'npm run build'与运行'ng build --prod'相同吗? –

+0

是的,但'prebuild'表示不会触发。 虽然你可以打两个电话: 'ng lint --fix && ng build -prod' – Jan

+0

我喜欢这个想法,但使用-fix选项运行lint并不会真正移除控制台在我的文件中的使用。任何想法为什么? – Bob

3

只需添加这window.console.log = function(){}; if (environment.production) { enableProdMode(); }