2013-11-18 4 views
0

Я использую BundleTransformer.Yui.Minifiers.YuiJsMinifier в asp.net проекте MVC 4, но я думаю, что это YUI компрессор ошибка ...YUI JS Minifier испортите код

... 
var varName='...'; 
alert(varName); //alert('...') 
      $.ajax({ 
       url: url, 
       success: function (t, s) { 
alert(varName); //alert(t); 
} 

Когда BundleTrasformer преуменьшать & Затемнение этот код, используя переменную varName компрессора YUI, становится t, а параметр функции t остается t, поэтому varName get перезаписывается с помощью t ... checkout commented alert ... Мой вопрос: должен ли я менять компрессор или, может быть, переименовать все одно и два буквенные переменные в более длинные? Я делаю что-то неправильно? , если я просто изменить одну строку кода, все в порядке, поэтому я уверен, что это YUI компрессор ошибка

... 
var varName='...'; 
alert(varName); 
      $.ajax({ 
       url: url, 
       success: function (data, s) { 
alert(varName); 
} 

PS Я знаю, что это не хорошая практика, чтобы иметь имена переменных одну букву, но она по-прежнему YUI ошибка компрессора ... PPS: Я использую функцию eval внутри succes. (Знайте, что это тоже не очень хорошая практика, но, тем не менее, компрессор YUI не должен разрушать код: /)

+1

Вы можете показать свою версию кода и мини-код? В основном YUI Compressor - это синтаксический анализатор, который удаляет пробелы, удаляет комментарии и переименовывает длинные имена переменных с короткими, и делает это разумным образом, учитывая область видимости переменных и т. Д., Основанную на многих вариантах использования. Эти варианты использования должны быть вполне нормальными, чтобы иметь функциональный минифицированный код. Так что я пытаюсь сказать, что инженеры Yahoo были более сосредоточены на том, чтобы сделать работу с миниварами, как ожидалось, в «вполне нормальных» случаях, а не спрашивать себя о «странных» случаях использования, потому что их может быть много! – eAbi

+0

Я не могу дать вам полный код, но это целая важная часть ... – dado89

ответ

0

Переменная varName является глобальной, и поэтому ее имя не обрабатывается.

Вам необходимо сделать его локальным. Для этого оберните код в IIFE (Expression Expression Function Expression):

(function(){ 
    ... 
    var varName='...'; 
    alert(varName); 
       $.ajax({ 
        url: url, 
        success: function (data, s) { 
    alert(varName); 
    } 
})(); 
Смежные вопросы