2017-02-17 32 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(); }