2015-03-14 11 views
1

У меня есть конфигурация черновую для пехотинца-вно-уродовать, как так:Почему Grunt Uglify сохраняет мои имена функций?

options: { 
    mangle: { 
     topLevel: true 
    }, 
    compressor: { 
     sequences: true, 
     dead_code: true, 
     conditionals: true, 
     booleans: true, 
     unused: true, 
     if_return: true, 
     join_vars: true, 
     drop_console: true 
    }, 
    dist: { 
     cwd: 'public', 
     expand: true, 
     src: ['**/*.js'], 
     dest: 'public' 
    } 
} 

Вот некоторые примеры кода, как к тому, что у меня есть:

(function (Core, $, undefined) { 
    Core.Dom = { 
     AddItem: function() { 
     ... code ... 
     } 
    }; 

    ... etc ... 

}(window.Core = window.Core || {}, jQuery)); 

После я запускаю мой хрюкать задача компрессионные работы с точки зрения избавления от пробелов и т. д., но в коде все еще есть метки функций с его именами. Например, в сжатом файле Core.Dom.AddItem будет a.Dom.AddItem. Есть ли способ калечить имена там, где это будет a.b.c, где b=Dom и c=AddItem? Я также пробовал mangle: true, но он сохраняет имена функций. Кто-нибудь знает, что я сделал неправильно?

+0

Это действительно открытая проблема на grunt-contrib-uglify - https://github.com/gruntjs/grunt-contrib-uglify/issues/216 - рассматривайте это как ошибку, которая не является фиксированной (для кого-либо еще что имеет ту же проблему). – Rycochet

ответ

3

Просто представить себе, что это в другой файл:

window.Core.Dom.AddItem() 

Если уродовать переименован Core.Dom в a.b, что другой файл потерпит неудачу, потому что window.Core.Dom теперь window.Core.b.

Uglify переименовывает, что можно переименовать.

Причина переименовывает Core в a является то, что в этом контексте, то можно смело переименовать все вхождения Core внутри функции, не без того, чтобы беспокоиться о его использовании вне функции.

Также см. Концепцию закрытия.

+0

Это ошибка, это не отвечает на вопрос - не в последнюю очередь, поскольку сам UglifyJS имеет опцию ... – Rycochet

+0

Это не ошибка, это то, что ожидается от минификатора. – jlowcs

+0

Это ошибка - так как у искового объекта minifier есть опция «toplevel» для него - https://github.com/mishoo/UglifyJS2#mangler-options - опция была добавлена ​​в 2013 году. Gah - edit - ваш ответ «почему» - но опция mangle-props была добавлена ​​в июне этого года - есть ошибка, связанная с mangle, но искажение свойств было возможно через скрипт в течение многих лет. – Rycochet

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