为什么 uglifyjs 不删除死代码?
Why uglifyjs doesn't remove dead code?
例如,我有以下代码:
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 语句中的死代码?
根据 README for uglifyjs, the maintainer has shifted development effort to UglifyJS2。自述文件还说它只删除:
some unreachable code and warn about it (code that follows a return,
throw, break or continue statement, except function/variable
declarations).
Uglify2 做得更全面。我在 demo site 上测试了您的代码,它确实删除了整个 if 语句。它还支持 'conditional compilation'(或者更正确的条件代码删除),允许您在 uglifying 时在命令行定义全局变量。
尽管这个问题已经得到了公认的答案,但我认为值得一提的是
UglifyJS2
确实删除了死代码
要打开此功能,您需要在 CLI (uglifyjs --compress unused,dead_code
) 中或在 options
对象中设置适当的选项(如果您以编程方式调用 uglify
) (uglify(compress: { unused: true, dead_code: true });
).
例如,我有以下代码:
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 语句中的死代码?
根据 README for uglifyjs, the maintainer has shifted development effort to UglifyJS2。自述文件还说它只删除:
some unreachable code and warn about it (code that follows a return, throw, break or continue statement, except function/variable declarations).
Uglify2 做得更全面。我在 demo site 上测试了您的代码,它确实删除了整个 if 语句。它还支持 'conditional compilation'(或者更正确的条件代码删除),允许您在 uglifying 时在命令行定义全局变量。
尽管这个问题已经得到了公认的答案,但我认为值得一提的是
UglifyJS2
确实删除了死代码要打开此功能,您需要在 CLI (
uglifyjs --compress unused,dead_code
) 中或在options
对象中设置适当的选项(如果您以编程方式调用uglify
) (uglify(compress: { unused: true, dead_code: true });
).