Дійсно спізнитися на вечірку тут, але подумав, що це може допомогти тому, хто все ще шукає іншої відповіді:
Після спроби використовувати компресор YUI, я був розчарований, що він несумісний з більш новими версіями jQuery і Prism (дві основні сторонні бібліотеки JS, які мені потрібні для мого проекту, які я хотів стиснути в один файл). Тому я вирішив використати Terser , який є роздрібною програмою Uglify-JS, яка підтримує ES6 +. Мені не вдалося змусити його безпосередньо запускатись із <exec>
завданням, але принаймні, використовуючи метод командного рядка Windows, працює для Win 10 (принаймні, не кажучи, що це не може працювати інакше, але це була дуже проста робота). Не потрібно додавати нічого іншого до системної змінної Path (як правило, Node.JS додається під час встановлення). Я спочатку використовую <concat>
завдання ANT, щоб створити великий, нестиснений файл. Використовуйте, <fileset>
оскільки це збереже порядок (якщо це важливо, все одно).
<concat destfile="${js-big-file}" encoding="UTF-8" outputencoding="UTF-8" fixlastline="true">
<filelist refid="js-input-filelist"/>
</concat>
Потім використовуйте <exec>
завдання для запуску будь-якої програми NPM, наприклад, Terser. Сторінка керівництва Apache в цьому завданні вказала, що це рішення Windows для запуску файлів .bat, але це дійсно дозволяє запускати практично будь-які програми командного рядка (навіть ті, які <exec>
загадково не можуть знайти інше).
<exec executable="cmd">
<arg value="/c"/>
<arg value="terser"/>
<arg value="${js-big-file}" />
<arg value="-o" />
<arg value="${smaller-js-file}"/>
</exec>
Інтегрувати? Це частина сценарію збірки ANT (плагін DITA Open Toolkit для підтримки користувальницького JavaScript, серед іншого - не веб-додаток Java, як такий, але використання Java для створення вихідного HTML5), тому інтеграція була не набагато більше, ніж додавання цих завдання на нову ціль (є більше коду щодо встановлення значень за замовчуванням та перевірки вхідних параметрів!).
Легко увімкнути / вимкнути? У моєму випадку у мене є параметр, який я передаю до збірки ANT, щоб включити створення та мінімізацію файлу JS. Так, так, вона виконує цю ціль лише в тому випадку, якщо я встановив параметр на "Так". Це досить проста річ для встановлення в збірці ANT.
Прозорий На сьогодні, схоже, це не впливає на жоден із декількох файлів JS, які я включаю. Деякі з них є моїми власними (і я жодним чином не знавець JS), а деякі, як я вже згадував, є загальними бібліотеками JS.
Minifier Terser , але за допомогою цього методу ви можете використовувати практично будь-яку мінімізовану введення командного рядка.
Не вистачає можливостей? Terser працює лише з JavaScript. Якщо я хочу зробити те ж саме для своїх CSS-файлів (що я роблю), я використовую компресор YUI.
Подобається, що це зараз активний проект і має гарну підтримку. Крім того, поточна реалізація (лише виклик її через <exec>
ціль ANT ) дозволяє мені міняти міні-фільтри, якщо мені потрібно використовувати щось інше в дорозі.
Не подобається, що для цього потрібен Node.JS. Нічого проти Node.JS, зауважте, тільки що цей конкретний проект не потребує цього в іншому випадку. Я б вважав за краще використовувати для цього файл Java .jar, як YUI Compressor (я можу легко розповсюджувати це за допомогою плагіна).