#javascript #jquery #.net #noop #minifyjs
Вопрос:
Когда я публикую свое приложение .NET, один из моих файлов JS неправильно сокращается. У меня есть несколько сотен строк кода в файле, но после завершения процесса получается почти пустая функция. Я прошел через него и определил, что он сводится к $.noop
тому, что я использую, без этого процесс работает нормально. Чтобы продемонстрировать это, я разбил его на простой пример, который показывает, как это влияет на файл.
var MyApp = {};
MyApp.EmailPopup = (function () {
function Test() {
// do lots of jquery stuff
alert('hi');
}
var thisObject = {
Show: $.noop
};
thisObject.Show = function () {
Test();
};
return thisObject;
})();
При уменьшении вызов Test
удаляется, как показано на рисунке:
var MyApp={};MyApp.EmailPopup=function(){return{Show:$.noop}}();
Однако, если я удалю $.noop
функцию и вместо нее добавлю пустую функцию, например:
var MyApp = {};
MyApp.EmailPopup = (function () {
function Test() {
// do lots of jquery stuff
alert('hi');
}
var thisObject = {
Show: function () { } // this has changed
};
thisObject.Show = function () {
Test();
};
return thisObject;
})();
Затем я получаю желаемую уменьшенную версию:
var MyApp={};MyApp.EmailPopup=function(){return{Show:function(){alert("hi")}}}();
В реальном приложении, не включая эквивалентную Test
функцию, я теряю сотни строк кода. Может ли кто-нибудь объяснить, почему использование $.noop
предотвращает его работу, но инициализация пустой функции или null работает? Это веб-приложение .NET 4.8, оно использует jQuery 3.3.1, и я создаю его с помощью Visual Studio 2019.
Комментарии:
1. Похоже на ошибку в minify.js для меня. В чем причина инициализации
thisObject
с$.noop
помощью и переопределения этого позже в первую очередь? Если у вас есть вся информация, которая позволяет вам решить, хотите ли вы использовать$.noop
или что-то еще прямо во время построения функции, решите это тогда и там, а не через пару строк.2. Я знаю, что в этом нет необходимости. Это было сделано для того, чтобы легко выделить все функции, которые будут доступны для использования в занятом «классе». Я легко могу это обойти, но в этот момент мне было просто интересно, была ли на то причина 🙂
3. Как я уже сказал, для меня это похоже на ошибку в minifyjs. Другой минимизатор, вероятно, работает лучше.
4. Спасибо за вклад!