2015-08-20 12 views
7

Zum Beispiel habe ich den folgenden Code:Warum entfernt Uglifyjs keinen toten Code?

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

var a = 5; 

Dann schreibe ich uglifyjs code.js -o code.min.js. Als Ergebnis habe ich Folgendes:

Wie kann ich den toten Code innerhalb der If-Anweisung entfernen?

+0

Was ist der tote Code? '' console.log''? oder der gesamte if Block? Ersteres ist ein vollkommen gültiger Code mit vollkommen gültigem Zweck. Es ist ganz anders als das Optimieren von ''if (a == 1 || a == 1)' '. Plus, ich denke, dass Uglifier sehr begrenzte Optimierung hat. – CppLearner

+0

Der Code innerhalb des if-Blocks wird niemals ausgeführt. Also, es ist tot. – user2991036

+0

Sie benötigen statische Analyse-Tool, nicht nur AST-Parser. – CppLearner

Antwort

8

Trotz dieser Frage bereits eine Antwort akzeptiert hat bekam, ich glaube, es lohnt sich zu erwähnen, dass

  1. UglifyJS2 totem Code tut entfernen

  2. diese Funktion zu aktivieren, müssen Sie entweder entsprechende Option einstellen in CLI (uglifyjs --compress unused,dead_code) oder im options Objekt, wenn Sie uglify programmgesteuert aufrufen (uglify(compress: { unused: true, dead_code: true });).

+0

Für mich musste ich auch evaluate und conditionals auf true setzen und die meisten anderen Dinge auf false setzen. Ich wollte nur eine tote Code-Eliminierung, keine andere Komprimierung. – Patrik

4

Gemäß der README für uglifyjs hat der Betreuer die Entwicklungsbemühungen auf UglifyJS2 verschoben. Die Readme sagt auch, dass es nur entfernt:

einige unerreichbaren Code und warnen darüber (Code, der eine Rückkehr folgt, Wurf, brechen oder continue-Anweisung, außer Funktion/Variable Erklärungen).

Uglify2 ist umfassender. Ich habe Ihren Code auf der demo site getestet und es tatsächlich die gesamte if-Anweisung entfernt. Es unterstützt auch 'bedingte Kompilierung' (oder möglicherweise korrekteres bedingtes Entfernen von Code), indem es Ihnen erlaubt Globals in der Befehlszeile zu definieren.

+0

Vielen Dank für Ihre Hilfe! Das ist die Lösung für mein Problem – user2991036