MicrosoftAjaxMinifier, похоже, не удаляет "недоступный код"
Я использую это с BundleTransformer
от Nuget и System.Web.Optimisation
в приложении ASP.Net. Согласно различным документам этот минификатор должен "удалять недоступный код". Я знаю, что это не так агрессивно, как закрытие Google (которое я не могу использовать в настоящее время), но я не могу заставить работать даже самые простые случаи, например;
function foo() {
}
где foo
не вызывается ниоткуда. Я могу оценить аргумент, который говорит, что это может быть экспортированная функция, но я не вижу способа дифференцировать это. Весь мой JS-код объединен, поэтому я могу точно сказать, нужна ли эта функция или нет, если я найду нужные переключатели.
Единственный способ пропустить ненужный код - использовать debugLookupList
свойство в web.config для BundleTransformer
но это похоже на кувалду, чтобы сломать орех. Это не очень гранулировано.
У кого-нибудь есть пример того, как написать так называемый "недоступный код", который распознает этот минификатор?
Вот место для тестирования онлайн
1 ответ
Я сомневаюсь, что у minifier есть какой-либо способ узнать, можно ли безопасно удалить глобально определенную функцию (так как он не знает всей области видимости). С другой стороны, он может не удалять неиспользуемые функции и может интересоваться только недоступным кодом (т. Е. Кодом после return
).
Используя шаблон модуля JavaScript, ваши неиспользуемые частные функции, скорее всего, будут корректно привязаны (хотя я не проверял это). В приведенном ниже примере минификатор должен быть уверен только в удалении вызываемой функции. privateFunction
, Рассматривает ли он неиспользуемые функции как недоступный код, это другой вопрос.
var AmazingModule = (function() {
var module = {};
function privateFunction() {
// ..
}
module.otherFunction = function() {
// ..
};
return module;
}());
function anotherFunction() {
// ..
}