Действительно поздно на вечеринку, но подумал, что это может помочь кому-то, все еще ищущему другой ответ:
После попытки использовать YUI Compressor я был разочарован тем, что он несовместим с более поздними версиями 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 Compressor.
Like That это активный проект, имеющий хорошую поддержку. Кроме того, текущая реализация (вызов только через ANT<exec>
цель ) позволяет мне менять минификаторы, если мне понадобится что-то еще в будущем.
Не нравится Это требует Node.JS. Ничего против Node.JS, заметьте, просто этому конкретному проекту в противном случае он не нужен. Я бы предпочел использовать для этого файл Java .jar, например YUI Compressor (я могу легко распространить его с помощью плагина, если мне это нужно).