2016-03-29 23 views
0

我以前在JavaScript應用程序中編寫了很多調試代碼,我正在尋找一種技術,可以在編譯/縮小過程中擺脫調試代碼。如何在編譯/縮小過程中擺脫JavaScript中不必要的調試代碼?

JavaScript World中是否存在C/C++中的一些等價的編譯指令?

在C/C++,它看起來像這樣:

#ifdef _DEBUG 
counter++; 
#endif 

PS。目前,我使用gulp

+0

你如何縮小,連接你的代碼?例如,您可以在browserify中實現一個可以移除'console.log'的變換,但它取決於您認爲是調試代碼的內容。 – ste2425

+1

@zhe這取決於你正在使用哪個縮微器。例如(很多人中的一個!)用'grunt'你可以使用'strip-code'任務。 –

+1

如果你使用'gulp'作爲你的任務跑步者。您可以安裝'npm strip-debug'插件並將任務添加到您的gulp文件中。我覺得'grunt'也有這個選項。 –

回答

1

我認爲你正在嘗試做的是使用任務運行器,如gruntgulp。這兩個工具都是一個任務運行器,它使用插件將代碼轉換爲執行此類操作。

這樣所謂的「插件」是gulp-preprocess。這個插件做你問:)

更多的瞭解一飲而盡,你可以去到gulp網站或在網上找到一些很好的教程...

+0

謝謝! gulp-preprocess看起來非常強大。但是,對於我的任務來說,它有很多冗餘功能。從那以後,解決我的問題的最好方法是使用條形碼(可用於咕嚕聲和吞嚥)。這很簡單,而且完全符合我的要求。 – zhekaus

1

帶調試

從JavaScript代碼中刪除控制檯,警報和調試器語句

用於確保您沒有在生產代碼中留下任何日誌記錄。

也可作爲吞/ grunt /西蘭花插件。

使用

$ npm install --save strip-debug 

var stripDebug = require('strip-debug'); 

stripDebug('function foo(){console.log("foo");alert("foo");debugger;}').toString(); 
//=> function foo(){void 0;void 0;} 

與一飲而盡

var gulp = require('gulp'); 
var stripDebug = require('gulp-strip-debug'); 

gulp.task('default', function() { 
    return gulp.src('src/app.js') 
     .pipe(stripDebug()) 
     .pipe(gulp.dest('dist')); 
}); 

有關詳情,請這個用法:link,而這一次與一飲而盡使用:link

+0

gulp-strip-debug很好。不過,我正在使用AngularJS和gulp-strip-debug,不幸的是,在這種情況下什麼都不做。我找不到AnglarJS應用程序的好選擇。 – zhekaus

0

大概學術,但這是一個純JavaS的答案CRIPT。你可以使用類似的東西從代碼中完全剝離一些函數,並且根據你的編譯器,將編譯爲無。

/** @const */ 
var NDEBUG = false; // change to true for production 
var assert = (() => NDEBUG ?() => {}: test => console.assert(test(), test.toString()))(); 

如果NDEBUG == true則斷言變成一個空函數:() => {},否則,如果NDEBUG == false,它需要一個函數作爲參數,調用函數和測試結果。

用法:

var divideByResult = function (a, b) { 
    assert (() => b() !== 0); 
    return a()/b(); 
} 

這就像一個C風格的斷言。如果NDEBUG == false僅在斷言中的函數被調用。我們傳遞一個函數來聲明而不是表達式。如果我們傳遞了一個表達式,表達式b() !== 0可能有副作用並將被評估。這樣,我們保證assert中的表達式永遠不會在生產代碼中被評估,並且優化編譯器可以安全地將assert作爲死代碼移除。