舉例來說,我有以下代碼:爲什麼uglifyjs不會刪除死碼?
if ("a" !== "a") {
console.log('really?');
}
var a = 5;
然後我寫uglifyjs code.js -o code.min.js
。因此,我有以下內容:
if("a"!=="a"){console.log("really?")}var a=5;
如何啓用刪除if語句內的死代碼?
舉例來說,我有以下代碼:爲什麼uglifyjs不會刪除死碼?
if ("a" !== "a") {
console.log('really?');
}
var a = 5;
然後我寫uglifyjs code.js -o code.min.js
。因此,我有以下內容:
if("a"!=="a"){console.log("really?")}var a=5;
如何啓用刪除if語句內的死代碼?
儘管這個問題已經得到了公認的答案,我認爲這是值得一提的是,
UglifyJS2
確實去除死碼
要關閉此功能,你需要或者設置相應的選項在CLI(uglifyjs --compress unused,dead_code
)或options
對象中,如果以編程方式調用uglify
(uglify(compress: { unused: true, dead_code: true });
)。
對於我來說,我還需要將評估和條件設置爲true,並將其他大部分內容設置爲false。我只想去死代碼,而不是任何其他的壓縮。 – Patrik
根據uglifyjs的README,維護者已將開發工作轉移到UglifyJS2。自述也說,它不僅能消除:
一些無法訪問的代碼,並警告它(隨後返回, 扔,打破或continue語句,除了功能/變量 聲明代碼)。
Uglify2做了一個更全面的工作。我在demo site上測試了你的代碼,它確實刪除了整個if語句。它還支持'條件編譯'(或者更準確地說,有條件的代碼刪除),允許你在uglifying時在命令行定義全局變量。
謝謝你的幫助!這是我的問題的解決方案 – user2991036
什麼是死代碼? ''console.log''?或整個if塊?前者是完全有效的代碼,具有完全有效的目的。它與優化''如果(a == 1 || a == 1)''非常不同。另外我認爲uglifier的優化非常有限。 – CppLearner
if-block內的代碼永遠不會運行。所以,它已經死了。 – user2991036
你需要靜態分析工具,而不僅僅是AST解析器。 – CppLearner