Автоматизация Eclipse "Yui Compressor..."
Eclipse PDT имеет этот удобный встроенный Yui Compressor в контекстном меню для файлов. Но при создании веб-приложения, использующего несколько таких файлов, становится утомительно сжимать файлы вручную после каждого обновления. Он даже не помнит, какие файлы сжимают, к каким именам файлов, поэтому вы должны ввести это снова.
Можно ли легко автоматизировать этот процесс в Eclipse, чтобы вы могли нажать "build" или что-то еще, и все указанные файлы будут сжаты до своих целей?
В документации по этой функции Yui в Eclipse действительно есть вакуум.
Я использую Eclipse Indigo 3.7.0 с PDT 3.0.0.v20110516-11, но и PDT, и опция Yui остались довольно похожими со времен Galileo
-Обновить-
Решения для автоматизации, не родные для Eclipse, но близкие:
GNU make makefile
%-min.js: %.js ${java} -jar ${compressor} $< -o ${<:.js=-min.js}
Пакет Windows
FOR %f IN (*.js) DO java -jar yuicompressor.jar %f -o deploy\%f
Linux Shellscript
ls -1 *.js | awk '{printf("java -jar yuicompressor.jar %s -o deploy/%s",$1,$1)}' | /bin/sh
ANT файл
Смотрите здесь: http://www.ubik-ingenierie.com/ubikwiki/index.php?title=Minifying_JS/CSS
Как мне вставить сюда html/xml?
Также посмотрите этот вопрос.
2 ответа
Ну, на самом деле я скачал флягу и создал задачу ANT для сжатия CSS и JS. Я работаю над Tomcat, поэтому он включает в себя задачи по загрузке, очистку каталога / работы и тому подобное. Надеюсь, поможет.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE project>
<project name="MyProject" default="subir">
<!-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-->
<property name="project.name" value="MyProject" />
<property name="src.dir" location="src" />
<property name="web.dir" location="WebContent" />
<property name="lib.dir" location="WebContent/WEB-INF/lib" />
<property name="bin.dir" location="WebContent/WEB-INF/classes" />
<property name="minify.dir" location="minified" />
<property name="minify.sourcedir" location="${skin.dir}/resources/" />
<!-- <property name="minify.sourcedir" location="${web.dir}/resources/" /> -->
<!-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-->
<property prefix="env" file="build.properties" />
<path id="project.classpath">
<pathelement location="${src.dir}" />
<fileset dir="${lib.dir}">
<include name="*.jar" />
</fileset>
</path>
<path id="yui.classpath.minifier">
<fileset dir="${lib.dir}">
<include name="YUIAnt.jar" />
<include name="yuicompressor-2.4.2.jar" />
</fileset>
</path>
<!-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-->
<target name="checkTomcatHome">
<condition property="local.tomcathome.exists">
<available file="${env.TOMCAT_PRUEBAS}" type="dir" />
</condition>
</target>
<target name="subir" depends="checkTomcatHome" if="local.tomcathome.exists">
<echo message="El servidor Tomcat destino existe, buscando archivos para copia en el proyecto y en en OsmoCore/WebContent..." />
<copy todir="${env.TOMCAT_PRUEBAS}/webapps/${project.name}">
<fileset dir="${web.dir}">
<include name="**/*.*" />
</fileset>
</copy>
<!--<echo message="Buscando archivos para copia en ${env.TOMCAT_PRUEBAS}/webapps/${project.name}/WEB-INF/classes..." />
<copy todir="${env.TOMCAT_PRUEBAS}/webapps/${project.name}/WEB-INF/classes">
<fileset dir="${bin.dir}">
<include name="**/*.*" />
</fileset>
</copy>-->
</target>
<!-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-->
<target name="WAR">
<delete file="${project.name}.war"/>
<delete dir="TMP_WAR"/>
<mkdir dir="TMP_WAR"/>
<copy todir="TMP_WAR">
<fileset dir="${web.dir}">
<include name="**/*.*" />
</fileset>
</copy>
<copy todir="TMP_WAR/WEB-INF/classes">
<fileset dir="${bin.dir}">
<include name="**/*.*" />
</fileset>
</copy>
<delete dir="${project.name}.war"/>
<zip destfile="${project.name}.war">
<zipfileset dir="TMP_WAR">
<include name="**/*.*" />
</zipfileset>
</zip>
<delete dir="TMP_WAR"/>
</target>
<!-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-->
<target name="subirCompleto" depends="checkTomcatHome" if="local.tomcathome.exists">
<echo message="El servidor Tomcat destino existe, buscando carpetas Work y ${project.name} en Webapps, para eliminar" />
<delete dir="${env.TOMCAT_PRUEBAS}/work" />
<delete dir="${env.TOMCAT_PRUEBAS}/webapps/${project.name}" />
<antcall target="subir" />
</target>
<!-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-->
<target name="borrarWork" depends="checkTomcatHome" if="local.tomcathome.exists">
<echo message="El servidor Tomcat destino existe, buscando carpeta Work a eliminar..." />
<delete dir="${env.TOMCAT_PRUEBAS}/work"/>
</target>
<!-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-->
<target name="css.minify">
<echo message="Creando directorio temporal ${minify.dir} (si no existe aún)..." />
<mkdir dir="${minify.dir}" />
<echo message="Borrando versión anterior de la carpeta temporal ${minify.dir}/css-min/..." />
<delete dir="${minify.dir}/css-min/" />
<echo message="Creando carpeta temporal ${minify.dir}/css-min/..." />
<mkdir dir="${minify.dir}/css-min/" />
<echo message="Copiando estructura de ${web.dir}/resources/styles/ en carpeta temporal..." />
<copy todir="${minify.dir}/css-min/">
<fileset dir="${minify.sourcedir}/styles/">
<include name="**/*.*" />
</fileset>
</copy>
<echo message="Borrando los CSS copiados a la carpeta temporal..." />
<delete>
<fileset dir="${minify.dir}/css-min/" >
<include name="**/*.css"/>
</fileset>
</delete>
<echo message="Comprimiendo!!!..." />
<apply executable="java" parallel="false" dest="${minify.dir}/css-min/">
<fileset dir="${minify.sourcedir}/styles/">
<include name="**/*.css"/>
</fileset>
<arg line="-jar"/>
<arg path="${lib.dir}/yui_compressor/yuicompressor-2.4.7.jar"/>
<arg line="--line-break 0"/>
<arg line="--type css"/>
<arg line="--charset ISO-8859-1"/>
<arg line="--nomunge"/>
<!-- <arg line="- -verbose"/> -->
<srcfile />
<arg line="-o"/>
<mapper type="glob" from="*.css" to="*.css"/>
<targetfile />
</apply>
</target>
<!-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-->
<target name="js.minify">
<echo message="Creando directorio temporal ${minify.dir} (si no existe aún)..." />
<mkdir dir="${minify.dir}" />
<echo message="Borrando versión anterior de la carpeta temporal ${web.dir}/resources/js-min/..." />
<delete dir="${minify.dir}/js-min/" />
<echo message="Creando carpeta temporal ${web.dir}/resources/js-min/..." />
<mkdir dir="${minify.dir}/js-min/" />
<echo message="Copiando estructura de ${web.dir}/resources/scripts/ en carpeta temporal..." />
<copy todir="${minify.dir}/js-min/">
<fileset dir="${minify.sourcedir}/scripts/">
<include name="**/*.*" />
</fileset>
</copy>
<echo message="Borrando los JS copiados a la carpeta temporal..." />
<delete>
<fileset dir="${minify.dir}/js-min/" >
<include name="**/*.js"/>
</fileset>
</delete>
<echo message="Comprimiendo!!!..." />
<apply executable="java" parallel="false" dest="${minify.dir}/js-min/">
<fileset dir="${minify.sourcedir}/scripts">
<include name="**/*.js"/>
</fileset>
<arg line="-jar"/>
<arg path="${lib.dir}/yui_compressor/yuicompressor-2.4.7.jar"/>
<arg line="--line-break 0"/>
<arg line="--type js"/>
<arg line="--charset ISO-8859-1"/>
<arg line="--nomunge"/>
<!--<arg line="- -verbose"/>-->
<srcfile />
<arg line="-o"/>
<mapper type="glob" from="*.js" to="*.js"/>
<targetfile />
</apply>
</target>
<!-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-->
<target name="js.minified.subir" depends="checkTomcatHome" if="local.tomcathome.exists">
<echo message="El servidor Tomcat destino existe, copiando archivos 'encogidos' a ${env.TOMCAT_PRUEBAS}/webapps/${project.name}/resources/scripts..." />
<copy todir="${env.TOMCAT_PRUEBAS}/webapps/${project.name}/resources/scripts" overwrite="yes">
<fileset dir="${minify.dir}/js-min/">
<include name="**/*.*" />
</fileset>
</copy>
</target>
<!-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-->
<target name="css.minified.subir" depends="checkTomcatHome" if="local.tomcathome.exists">
<echo message="El servidor Tomcat destino existe, copiando archivos 'encogidos' a ${env.TOMCAT_PRUEBAS}/webapps/${project.name}/resources/styles..." />
<copy todir="${env.TOMCAT_PRUEBAS}/webapps/${project.name}/resources/styles" overwrite="yes">
<fileset dir="${minify.dir}/css-min/">
<include name="**/*.*" />
</fileset>
</copy>
</target>
<!-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-->
<target name="css.minified.process">
<echo message="Reduciendo el tamaño de los archivos CSS..." />
<antcall target="css.minify" />
<echo message="Cargando los archivos CSS..." />
<antcall target="css.minified.subir" />
<echo message="Borrando la carpeta temporal..." />
<delete dir="${minify.dir}" />
</target>
<!-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-->
<target name="js.minified.process">
<echo message="Reduciendo el tamaño de los archivos JS..." />
<antcall target="js.minify" />
<echo message="Cargando los archivos JS..." />
<antcall target="js.minified.subir" />
<echo message="Borrando la carpeta temporal..." />
<delete dir="${minify.dir}" />
</target>
<!-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-->
</project>
Вы можете выбрать и "собрать" ресурсы js/css, настроив и добавив External Tool с помощью пакета (для пользователей Windows).
Шаг 1: Добавьте "yuicompressor" и "minify.bat" (см. Ниже) в ваш проект.
Шаг 2. Настройте внешний инструмент с именем "Minify" (Выполнить -> Внешние инструменты -> Конфигурации внешних инструментов).
Шаг 3: Выберите ресурсы (js/css) или каталог, который их содержит, и нажмите "Minify". Файлы js/css будут развернуты в одноуровневом каталоге "min".
(Minify.bat)
@echo off
set target=%1
set yui=%2\WebContent\build\yuicompressor\yuicompressor-2.4.8.jar
:: %1 selected resource
:: %2 current project
:: dir
if exist %target%\ (
cd /d %target%
mkdir min 2>nul
for %%f in (*.js *.css) do (
echo Minifying "%%~ff"
java -jar %yui% %%f -o min\%%f
)
goto end
)
:: .js/.css
set pathNoExt=0
for /f %%i in ('dir /b %target%') do set pathNoExt=%%~ni
if not %pathNoExt%==0 (
cd /d %~dp1
mkdir min 2>nul
for /f %%f in ('dir /b %pathNoExt%.js %pathNoExt%.css') do (
echo Minifying "%%~ff"
java -jar %yui% %%f -o min\%%f
)
)
:end
echo Minified
Вы также можете минимизировать пакет, используя Node.js. Однако, эта опция только для пользователей Linux (пока).
Каждый раз, когда некоторому программному пакету ужасно не хватает удобства (Eclipse) или пакетный формат сборщика просто сумасшедший (ANT), приходит кто-то умный и создает что-то потрясающее.
В этом случае,
это потрясающе
Просто подумал, что обновлю этот вопрос и добавлю ответ.
Я хотел бы улучшить ответ мегре ( /questions/36581204/avtomatizatsiya-eclipse-yui-compressor/36581226#36581226). Его решение работает, но его можно улучшить. Хотя все заслуги ему.
На шаге 2: Измените расположение командного файла на ${project_loc}\build\minify.bat. Поместите командный файл "minify.bat" в подпапку "build" в папке вашего проекта. Также измените аргументы с "$resource_loc $project_loc" на "${project_loc}".
Если это не сработает, попробуйте "$ project_loc". Похоже, что разные версии Eclipse используют разные переменные.
Смотрите скриншот:
Я полностью изменил командный файл:
@ECHO OFF
REM Note: There is a bug in yuicompressor 2.4.8 causing yuicompressor not te be accessible
REM see https://stackru.com/a/19339287/760777
SET yui="C:\Program Files (x86)\yuicompressor\yuicompressor-2.4.7.jar"
SET cssFolder=%1\css
SET jsFolder=%1\js
IF EXIST %cssFolder% (
ECHO Processing folder "%cssFolder%" ...
CD %cssFolder%
MKDIR min 2>NUL
FOR %%f IN (*.css) DO (
ECHO Minifying "%%~ff"
java -jar %yui% %%f -o min\%%f
)
) ELSE (
ECHO %cssFolder% does not exist. Put your css files in a subfolder "css" in the current project folder
)
IF EXIST %jsFolder% (
ECHO Processing folder "%jsFolder%" ...
CD %jsFolder%
MKDIR min 2>NUL
FOR %%f IN (*.js) DO (
ECHO Minifying "%%~ff"
java -jar %yui% %%f -o min\%%f
)
) ELSE (
ECHO %jsFolder% does not exist. Put your js files in a sub folder "js" in the current project folder
)
Наверное, нет необходимости говорить, но для использования минифицированных файлов вам необходимо соответствующим образом изменить ссылки в ваших файлах HTML / PHP.