Использование задачи uglify grunt испортило селективность
У меня есть проект Yeoman, который использует https://github.com/gruntjs/grunt-contrib-uglify в своих файлах Javascript. При запуске в библиотеке Selectvizr (с использованием Bower) результирующий файл выглядит следующим образом:
!function(win){return}(this);
Я думаю, это потому, что Selectivizr настроен так, чтобы ничего не делать, если браузер не IE, поэтому, возможно, в контексте выполнения Grunt он делает именно это?
Поэтому я хочу знать, можно ли запустить Uglify на Selectivizr и создать что-то полезное?
3 ответа
Uglify обрабатывает JavaScript с единственной целью оптимизации. Его задача - сделать файл очень маленьким любым возможным способом. Для этого он обнаруживает любые не переменные условия в коде, такие как if (true) { return; }
, поскольку true
всегда верно, функциональность этого условия интерпретируется и оптимизируется для.
Так что это не ошибка Uglify, так как она сделала свою работу правильно. Я не знаком с трюком, который использует Selectivizr, но если он работает, он работает.
К сожалению, единственное решение, которое я могу придумать, это не позволить Uglify работать с файлом, а вместо этого скопировать его в dist/
непосредственно.
var result = navigator.userAgent.match(/MSIE (\d+)/);
if (result) {
var ieVersion = result[1];
}
else {
return;
}
Пожалуйста, используйте приведенный выше код для решения этой проблемы. Я тоже получил ту же проблему, и она была исправлена после обновления этой строки.
Другое решение - закомментировать / удалить строку 32 в selectivizr.js:
if (/*@cc_on!@*/true) return;
Это строка, ломающая задачу uglify/concat. Запустите снова, и это будет работать.
Больше на Github