我以前在JavaScript應用程序中編寫了很多調試代碼,我正在尋找一種技術,可以在編譯/縮小過程中擺脫調試代碼。如何在編譯/縮小過程中擺脫JavaScript中不必要的調試代碼?
JavaScript World中是否存在C/C++中的一些等價的編譯指令?
在C/C++,它看起來像這樣:
#ifdef _DEBUG
counter++;
#endif
PS。目前,我使用gulp
我以前在JavaScript應用程序中編寫了很多調試代碼,我正在尋找一種技術,可以在編譯/縮小過程中擺脫調試代碼。如何在編譯/縮小過程中擺脫JavaScript中不必要的調試代碼?
JavaScript World中是否存在C/C++中的一些等價的編譯指令?
在C/C++,它看起來像這樣:
#ifdef _DEBUG
counter++;
#endif
PS。目前,我使用gulp
我認爲你正在嘗試做的是使用任務運行器,如grunt
或gulp
。這兩個工具都是一個任務運行器,它使用插件將代碼轉換爲執行此類操作。
這樣所謂的「插件」是gulp-preprocess。這個插件做你問:)
更多的瞭解一飲而盡,你可以去到gulp網站或在網上找到一些很好的教程...
謝謝! gulp-preprocess看起來非常強大。但是,對於我的任務來說,它有很多冗餘功能。從那以後,解決我的問題的最好方法是使用條形碼(可用於咕嚕聲和吞嚥)。這很簡單,而且完全符合我的要求。 – zhekaus
帶調試
從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'));
});
gulp-strip-debug很好。不過,我正在使用AngularJS和gulp-strip-debug,不幸的是,在這種情況下什麼都不做。我找不到AnglarJS應用程序的好選擇。 – zhekaus
大概學術,但這是一個純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作爲死代碼移除。
你如何縮小,連接你的代碼?例如,您可以在browserify中實現一個可以移除'console.log'的變換,但它取決於您認爲是調試代碼的內容。 – ste2425
@zhe這取決於你正在使用哪個縮微器。例如(很多人中的一個!)用'grunt'你可以使用'strip-code'任務。 –
如果你使用'gulp'作爲你的任務跑步者。您可以安裝'npm strip-debug'插件並將任務添加到您的gulp文件中。我覺得'grunt'也有這個選項。 –