2015-08-20 78 views
7

举例来说,我有以下代码:为什么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语句内的死代码?

+0

什么是死代码? ''console.log''?或整个if块?前者是完全有效的代码,具有完全有效的目的。它与优化''如果(a == 1 || a == 1)''非常不同。另外我认为uglifier的优化非常有限。 – CppLearner

+0

if-block内的代码永远不会运行。所以,它已经死了。 – user2991036

+0

你需要静态分析工具,而不仅仅是AST解析器。 – CppLearner

回答

8

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

  1. UglifyJS2确实去除死码

  2. 要关闭此功能,你需要或者设置相应的选项在CLI(uglifyjs --compress unused,dead_code)或options对象中,如果以编程方式调用uglifyuglify(compress: { unused: true, dead_code: true });)。

+0

对于我来说,我还需要将评估和条件设置为true,并将其他大部分内容设置为false。我只想去死代码,而不是任何其他的压缩。 – Patrik

4

根据uglifyjs的README,维护者已将开发工作转移到UglifyJS2。自述也说,它不仅能消除:

一些无法访问的代码,并警告它(随后返回, 扔,打破或continue语句,除了功能/变量 声明代码)。

Uglify2做了一个更全面的工作。我在demo site上测试了你的代码,它确实删除了整个if语句。它还支持'条件编译'(或者更准确地说,有条件的代码删除),允许你在uglifying时在命令行定义全局变量。

+0

谢谢你的帮助!这是我的问题的解决方案 – user2991036