为什么 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 时在命令行定义全局变量。

尽管这个问题已经得到了公认的答案,但我认为值得一提的是

  1. UglifyJS2 确实删除了死代码

  2. 要打开此功能,您需要在 CLI (uglifyjs --compress unused,dead_code) 中或在 options 对象中设置适当的选项(如果您以编程方式调用 uglify) (uglify(compress: { unused: true, dead_code: true });).