<p>мы используем задачу ant для минимизации js-файлов с помощью yuicompressor во время производственной сборки и помещаем результат в отдельную папку. затем мы загружаем эти файлы на веб-сервер. вы можете найти несколько хороших примеров для интеграции yui + ant <a href="http://www.julienlecomte.net/blog/2007/09/16/">в этом блоге</a> .</p><p>вот пример:</p><pre><code><target name="js.minify" depends="js.preprocess"> <apply executable="java" parallel="false"> <fileset dir="." includes="foo.js, bar.js"/> <arg line="-jar"/> <arg path="yuicompressor.jar"/> <srcfile/> <arg line="-o"/> <mapper type="glob" from="*.js" to="*-min.js"/> <targetfile/> </apply> </target> </code></pre>

<p>я написал макросы ant для компилятора google closure и компрессора yahoo и включил этот файл в различные веб-проекты.</p><pre><code><?xml version="1.0" encoding="utf-8"?> <!-- css and js minifier. --> <!doctype project> <project name="minifier" basedir="."> <property name="gc" value="compiler-r1592.jar" /> <property name="yc" value="yuicompressor-2.4.6.jar" /> <!-- compress single js with google closure compiler --> <macrodef name="gc-js"> <attribute name="dir" /> <attribute name="src" /> <sequential> <java jar="${gc}" fork="true"> <!-- - - compilation_level whitespace_only | simple_optimizations | advanced_optimizations specifies the compilation level to use. default: simple_optimizations - - warning_level quiet | default | verbose specifies the warning level to use. --> <arg line="--js=@{dir}/@{src}.js" /> <arg line="--js_output_file=@{dir}/@{src}-min-gc.js" />  </sequential> </macrodef> <!-- compress single js with yahoo compressor --> <macrodef name="yc-js"> <attribute name="dir" /> <attribute name="src" /> <sequential> <java jar="${yc}" fork="true"> <arg value="@{dir}/@{src}.js" /> <arg line="-o" /> <arg value="@{dir}/@{src}-min-yc.js" /> </java> </sequential> </macrodef> <!-- compress all js in directory with yahoo compressor --> <macrodef name="yc-js-all"> <attribute name="dir" /> <sequential> <apply executable="java" parallel="false"> <fileset dir="@{dir}" includes="*.js" excludes="*-min*.js" /> <arg line="-jar" /> <arg path="${yc}" /> <srcfile /> <arg line="-o" /> <mapper type="glob" from=".js" to="@{dir}/-min-yc.js" /> <targetfile /> </apply> </sequential> </macrodef> <!-- compress all css in directory with yahoo compressor --> <macrodef name="yc-css-all"> <attribute name="dir" default="${build.css.dir}" /> <sequential> <apply executable="java" parallel="false"> <fileset dir="@{dir}" includes="*.css" excludes="*-min*.css" /> <arg line="-jar" /> <arg path="${yc}" /> <arg line="-v --line-break 0" /> <srcfile /> <arg line="-o" /> <mapper type="glob" from=".css" to="@{dir}/-min.css" /> <targetfile /> </apply> </sequential> </macrodef> </project>   интеграция: <import file="build-minifier.xml" /> в вашем build.xml, затем вызовите как обычно муравьиные задачи: <gc-js dir="${build.js.dir}" src="prototype" /></code> <code><yc-js-all dir="${build.js.dir}" />   выбор из двух минификаторов: компилятор google closure и компрессор yahoo, вы должны загрузить их вручную и поместить рядом с xml-файлом   минифайеры пропускают уже сжатые файлы (оканчивающиеся на -min)   обычно я делаю три версии сценария: несжатый (например, prototype.js) для отладки, сжатый компилятором закрытия (prototype-min-gc.js) для рабочего сервера, сжатый с помощью yahoo (prototype-min-yc.js) для устранения неполадок, потому что компилятор закрытия использует рискованные оптимизации и иногда создает недопустимый сжатый файл и компрессор yahoo более безопасно   компрессор yahoo может минимизировать все файлы в директории одним макросом, компилятор closure не может  

я попробовал два способа: используя фильтр сервлетов. в рабочем режиме фильтр активируется, и он сжимает все данные, связанные с url, например  .css или  .js. используя maven и <a href="http://alchim.sourceforge.net/yuicompressor-maven-plugin/">yuicompressor-maven-plugin ; сжатие выполняется una-tantum, (при сборке <strong> производственной войны </strong>) конечно, последнее решение лучше, поскольку оно не потребляет ресурсы во время выполнения (мое веб-приложение использует движок приложения google) и не усложняет код приложения. итак, предположим этот последний случай в следующих ответах:<blockquote> как это интегрировать? является ли это частью вашего инструмента сборки, фильтра сервлетов, отдельной программы пост-обработки файла war или чего-то еще? </blockquote>используя maven<blockquote> легко ли включать и отключать? очень несправедливо пытаться отлаживать минимизированный скрипт, но также полезно для разработчика иметь возможность проверить, что минификация ничего не нарушает. </blockquote>вы активируете его только при сборке финальной войны; в режиме разработки вы видите несжатую версию ваших ресурсов<blockquote> работает ли он прозрачно или имеет какие-либо побочные эффекты (помимо тех, которые присущи минификации), которые я должен учитывать в своей повседневной работе? </blockquote>абсолютно<blockquote> какой минификатор он использует? </blockquote>yui компрессор<blockquote> у него нет каких-либо особенностей, о которых вы можете подумать? </blockquote>нет, он очень полный и простой в использовании<blockquote> что вам нравится в нем? </blockquote>он интегрирован с моим любимым инструментом (maven), а плагин находится в центральном хранилище (хороший гражданин maven)

я действительно удивлен, что никто не упомянул <strong>jawr</strong> - <a href="https://j-a-w-r.github.io">https://j-a-w-r.github.io он довольно зрелый и поддерживает все стандартные функции, которые следует ожидать, и немного больше. вот как это держится против превосходных критериев оп.<blockquote> как это интегрировать? является ли это частью вашего инструмента сборки, фильтра сервлетов, отдельной программы пост-обработки файла war или чего-то еще? </blockquote>первоначально он выполнял обработку/тяжелую работу при запуске приложения, и обслуживание было основано на <a href="https://j-a-w-r.github.io/docs/servlet.html">сервлет . начиная с 3.x добавлена поддержка <a href="https://j-a-w-r.github.io/docs/bundle_preprocessing.html">интеграция во время сборки .поддержка jsp и facelets предоставляется через пользовательскую библиотеку тегов jsp для импорта обработанных ресурсов. кроме того, реализован загрузчик ресурсов js, который поддерживает <a href="https://j-a-w-r.github.io/docs/plain_html.html">загрузка ресурсов со статических html-страниц .<blockquote> легко ли включать и отключать? очень несправедливо пытаться отлаживать минимизированный скрипт, но также полезно для разработчика иметь возможность проверить, что минификация ничего не нарушает. </blockquote>опция debug=on доступна для использования перед запуском приложения, а пользовательский параметр get может быть задан в отдельных производственных запросах, чтобы выборочно переключать режим отладки во время выполнения для указанного запроса.<blockquote> какой минификатор он использует? </blockquote>для js он поддерживает yui compressor и jsmin, для css я не уверен.<blockquote> у него нет каких-либо особенностей, о которых вы можете подумать? </blockquote>поддержка sass приходит на ум. тем не менее, он поддерживает less.

это сработало для меня: <a href="https://bitbucket.org/m6_russell_francis/yui-compressor-ant-task/wiki/home">https://bitbucket.org/m6_russell_francis/yui-compressor-ant-task/wiki/home <!-- minimize all static .css & .js content --> <target name="static-content-minify"> <taskdef name="yuicompressor" classname="com.metrosix.yuicompressor.anttask.yuicompressortask"> <classpath> <pathelement location="${jar.yui.compressor}"/> <pathelement location="${jar.yui.anttask.compressor}" /> </classpath> </taskdef> <yuicompressor todir="${build.static.content.min}" charset="utf-8" preserveallsemicolons="true" munge="true" > <fileset dir="${src.static.content}"> <include name="**/*.css"/> <include name="**/*.js"/> </fileset> </yuicompressor> </target> </code></pre>

<p>я пишу каркас для управления веб-активами, называемый <a href="https://github.com/mwanji/humpty">humpty</a> . он стремится быть проще и современнее, чем jawr или wro4j, используя webjars и serviceloaders.</p><blockquote> <p>как это интегрировать? является ли это частью вашего инструмента сборки, фильтра сервлетов, отдельной программы пост-обработки файла war или чего-то еще?</p> </blockquote><p>в процессе разработки сервлет обрабатывает активы по мере необходимости. ресурсы будут предварительно скомпилированы перед производством и помещены в общую папку, так что единственная используемая часть генерирует правильные включения в html.</p><blockquote> <p>легко ли включать и отключать? очень несправедливо пытаться отлаживать минимизированный скрипт, но также полезно для разработчика иметь возможность проверить, что минификация ничего не нарушает.</p> </blockquote><p>это будет сделано путем переключения между режимами разработки и производства.</p><blockquote> <p>работает ли он прозрачно или имеет какие-либо побочные эффекты (помимо тех, которые присущи минификации), которые я должен учитывать в своей повседневной работе?</p> </blockquote><p>я считаю, что это прозрачно, но сильно поддерживает использование webjars.</p><blockquote> <p>какой минификатор он использует?</p> </blockquote><p>какой из плагинов вы используете в своем classpath. в настоящее время изучаю возможность написания плагина для компилятора google closure.</p><blockquote> <p>у него нет каких-либо особенностей, о которых вы можете подумать?</p> </blockquote><p>все еще предварительный релиз, хотя я использую его в производстве. плагин maven все еще требует много работы.</p><blockquote> <p>что вам нравится в нем?</p> </blockquote><p>простота простого добавления зависимости для настройки фреймворка</p><blockquote> <p>что тебе не нравится в этом?</p> </blockquote><p>это мой ребенок, я люблю все это;)</p>