为什么uglifyjs不会删除死代码?

use*_*036 8 javascript uglifyjs

例如,我有以下代码:

if ("a" !== "a") {
    console.log('really?');
}

var a = 5;
Run Code Online (Sandbox Code Playgroud)

然后我写uglifyjs code.js -o code.min.js.结果,我有以下几点:

if("a"!=="a"){console.log("really?")}var a=5;
Run Code Online (Sandbox Code Playgroud)

如何在if语句中启用删除死代码?

mea*_*dre 13

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

  1. UglifyJS2 确实删除了死代码

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


har*_*mic 5

根据uglifyjs 的README,维护者已将开发工作转移到UglifyJS2.README还说它只删除:

一些无法访问的代码并警告它(返回,抛出,中断或继续语句之后的代码,除了函数/变量声明).

Uglify2做得更全面.我在演示站点上测试了你的代码,它确实删除了整个if语句.它还支持'条件编译'(或者更准确地条件代码删除),允许您在uglifying时在命令行定义全局变量.