2016-04-13 6 views
1

Ich kann nicht scheinen, einen JS-Minifier zu finden, der die Komprimierung von Funktionsnamen durchführt. Zum Beispiel dieses Pseudo-Code angegeben:JS-Funktion Namen Kompression

//non pure function 
function test() { 
    //do some computations... 
    return <whatever>; 
} 

alert(test()); 

würde dann zum Beispiel dazu minimierte werden:

function t(){//do some computations... return <whatever>}alert(t()); 

Bisher habe ich kein JS Werkzeug gefunden, die diese Art der Kompression des Fall ist. Weiß jemand etwas?

+4

uglify js zu erhalten, ist ein gutes – JordanHendrix

+0

@JordanHendrix es ja ist, aber von dem, was ich gesehen habe, es nicht Funktionsnamen komprimiert ... –

+0

es tut, müssen Sie Mangling einschalten ... das gleiche mit der Antwort unter – JordanHendrix

Antwort

1

Wenn Sie UglifyJS verwenden, werden die Namen der obersten Ebene oder die Namen, die für den globalen Bereich verfügbar sind, nicht verworfen.

Sie können dies noch erreichen, wenn Sie auf der -mt oder --mangle-Toplevel-Flag in der Befehlszeile drehen wie so:

Hier einige Code ist ich in der Demo-Link gepostet Ihnen zur Verfügung gestellten:

function longfunctionname(a) { 
    return function reallylongfunctionname(b) { 
    return a + b; 
    }; 
} 

Hier ist der verstümmelten Code ohne Mangeln Top-Level eingeschaltet:

function longfunctionname(n){return function u(n){return n}} 

Wie Sie die Top-Level-Funktion nicht verstümmelt zu sehen ist, aber die innere Funktion ist

geht hier mehr zu lesen: http://lisperator.net/uglifyjs/

+0

Ok gut, danke, ich habe meinen Code in ein IIFE und, mit der Mangel Option, die Funktionsnamen wurden komprimiert –

+0

nett, das ist die schnelle Lösung! – JordanHendrix

-2

Definitiv! Sie können einen Task-Runner (d. H. Grunt oder Gulp) zur Unterstützung verwenden, aber der Prozess, den Sie beschreiben, wird normalerweise als "Verändern" oder "Mangeln" von JS definiert. Schauen Sie sich gulp-uglify oder grunt-contrib-uglify an, um loszulegen.

BEARBEITEN: Pro Kommentar zu dieser Antwort ist die Verwendung eines Task-Runner nicht erforderlich, da Sie UglifyJS allein verwenden können.

+1

Sie brauchen keinen Task Runner, es hilft, mehrere Aufgaben auszuführen, aber es wird nicht benötigt – JordanHendrix

+0

Guter Anruf. Antwort aktualisieren –

+0

Warum werden Funktionsnamen nicht auf diesem Online-Demo-Tool von uglifyjs komprimiert (mit deaktivierter Option mangle)? http://lisperator.net/uglifyjs/#demo –

-2

Seine gute Gewohnheit, Code zu schreiben, die nicht den globalen Raum nicht verschmutzen. Durch das Einschließen in eine anonyme Funktion wird der Code minimiert und kollidiert nicht mit anderen globalen Referenzen.

(function(){ 
    function test() { 
    //do some computations... 
    return "something"; 
    } 
    alert(test()); 
})(); 

Wenn Sie UglifyJs mit --mangle dem Ausgang laufen wie diese

!function(){function t(){return"something"}alert(t())}(); 

I https://skalman.github.io/UglifyJS-online/ verwendet aussehen wird erzeugt UglifyJs Code