Использование задачи 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

Другие вопросы по тегам