Сохраняйте пользовательские блоки с помощью YUI Compressor

Я использую YUI Compressor для минимизации файлов Javascript. Однако эти файлы Javascript содержат некоторый пользовательский контент (встроенные теги JSP), который мне нужно, чтобы YUI Compressor игнорировал. Я ищу что-то похожее на "пользовательские правила сохранения" в htmlcompressor.

Кто-нибудь знает, можно ли это сделать с помощью YUI Compressor? Если нет, то может ли кто-нибудь предложить альтернативу?


person Grodriguez    schedule 09.09.2011    source источник


Ответы (2)


Если вы используете JSP для создания javascript, сжимайте выходные данные сценария JSP, а не раньше.

Если вы не можете, вы должны отделить статический javascript и обслуживать динамический javascript отдельно.

person Evert    schedule 09.09.2011
comment
Хорошие предложения, спасибо. Однако первый подход невозможен. Второй подход, конечно, сработает, но требует серьезной переделки. - person Grodriguez; 09.09.2011
comment
Если вы считаете, что вам нужно динамически генерировать и сжимать большие файлы javascript, я думаю, вы делаете неправильные вещи. Если вы ищете обходной путь, просто поместите несколько заполнителей вместо тегов JSP и замените их после сжатия. Вы должны убедиться, что ваш заполнитель также попадает в окончательный вывод ... так что это может быть, например, какая-то строка. - person Evert; 09.09.2011
comment
На самом деле я не генерирую javascript динамически, однако мой вариант использования немного сложен и не стоит вникать. Однако идея с заполнителями интересна. - person Grodriguez; 10.09.2011
comment
Ну, вы, конечно, динамически генерируете часть своего JS, иначе вам не понадобился бы JSP, верно? - person Evert; 10.09.2011

Из документов по компрессору YUI вы можете сделать это, используя " подсказки":

+ It is possible to prevent a local variable, nested function or function
argument from being obfuscated by using "hints". A hint is a string that
is located at the very beginning of a function body like so:

function fn (arg1, arg2, arg3) {
    "arg2:nomunge, localVar:nomunge, nestedFn:nomunge";

    ...
    var localVar;
    ...

    function nestedFn () {
        ....
    }

    ...
}

В вашем случае вы можете добавить вложенную функцию и использовать подсказку «nomunge» для этой функции.

person jonjbar    schedule 09.09.2011
comment
Хорошая идея, не думал об этом. К сожалению, это не работает. Фактическая проблема заключается в том, что YUI Compressor пытается проанализировать файл Javascript и терпит неудачу, потому что код синтаксически неверен (из-за встроенного тега JSP). Что мне нужно, так это способ сказать YUI просто «игнорировать» тег JSP при разборе... - person Grodriguez; 09.09.2011
comment
Не могли бы вы просто извлечь эти проблемные части в другой JS и не сжимать их? Это было бы самое простое решение, которое я могу придумать, не слишком меняя ваш процесс. - person jonjbar; 09.09.2011