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() {
    // ..
}
Другие вопросы по тегам