2016-04-13 2 views
1

Я не могу найти JS-минификатор, который выполняет сжатие имен функций. Например, если этот псевдо-код:Сжатие имен функций функции JS

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

alert(test()); 

бы затем, например, быть минимизирован к этому:

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

До сих пор я не нашел какого-либо инструмента JS, что делает этот вид сжатия. Кто-нибудь знает что-нибудь?

+4

уродовать JS является хорошим – JordanHendrix

+0

@JordanHendrix да это есть, но из того, что я видел, он не сжимает имена функций ... –

+0

Это так, вы должны включить mangling ... то же самое с ответом ниже – JordanHendrix

ответ

1

Когда вы используете UglifyJS, он не будет отображать имена верхнего уровня или имена, доступные для глобальной области.

Вы все еще можете достичь этого, если вы включите -mt или --mangle-интерпретатора, флаг в командной строке следующим образом:

Вот код, я отправил в демонстрационном ссылке вы предоставили:

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

Вот подогнан код без верхнего коверкая уровня включен:

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

Как вы можете видеть, функция верхнего уровня не искажается, а внутренняя функция

идут сюда, чтобы узнать больше: http://lisperator.net/uglifyjs/

+0

Хорошо, спасибо, я поместил свой код внутри IIFE и, с проверкой опции mangle, имена функций были сжаты –

+0

nice, thats быстрое исправление! – JordanHendrix

-2

Определенно! Вы можете использовать бегун задачи (т. Е. Grunt или Gulp), чтобы помочь, но процесс, который вы описываете, обычно определяется как «угасающий» или «управляющий» JS. Зайдите gulp-uglify или grunt-contrib-uglify, чтобы начать.

EDIT: По комментариям к этому ответу использование бегуна задания не требуется, так как вы можете использовать UglifyJS самостоятельно.

+1

вам не нужен бегун задачи, он помогает запускать несколько задач, но не нужен – JordanHendrix

+0

Хороший звонок. Обновление ответа. –

+0

Итак, почему имена функций не сжимаются на этом онлайн-демонстрационном инструменте uglifyjs (с проверкой опции mangle)? http://lisperator.net/uglifyjs/#demo –

-2

Его хорошая привычка писать код, который не загрязняет глобальное пространство. Обертывая анонимную функцию, код будет минимизировать и не столкнется с другими глобальными ссылками.

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

Если запустить UglifyJs с --mangle на выходе будет выглядеть следующим образом

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

я использовал https://skalman.github.io/UglifyJS-online/ получить сгенерированный код UglifyJs

Смежные вопросы