[英]How to automate JavaScript files compression with YUI Compressor?
[英]Automate Eclipse “Yui Compressor…”
Eclipse PDT在文件的上下文菜單中有這個方便的內置Yui 壓縮器。 但是在構建使用多個此類文件的 web 應用程序時,每次更新后手動壓縮文件變得乏味。 它甚至不記得哪些文件壓縮為哪些文件名,因此您必須再次輸入。
是否可以在 Eclipse 中輕松自動化此過程,以便您可以單擊“構建”或其他內容,然后所有指定的文件都將被壓縮到其目標?
關於 Eclipse 中有關此 Yui 功能的文檔,確實存在空白。
我正在使用 Eclipse Indigo 3.7.0 和 PDT 3.0.0.v20110516-11,但自伽利略以來,PDT 和 Yui 選項都非常相似
-更新-
自動化解決方案,不是 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 腳本
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
另請參閱此問題。
好吧,我實際上下載了 jar 並創建了一個 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 資源(適用於 Windows 用戶)。
這使得只需按一個按鈕就可以縮小。 (它不是運行配置的一部分。)
先決條件: - 必須安裝 Java。 - 您必須下載 yuicompressor。 (目前官方下載頁面在這里: https : //github.com/yui/yuicompressor/releases )
步驟 1:將“yuicompressor”和“minify.bat”(如下所示)添加到您的項目中。
Step2:配置一個名為“Minify”的外部工具(進入菜單運行 -> 外部工具 -> 外部工具配置)。
Step3:選擇資源(js/css)或包含它們的目錄,點擊“縮小”。 js/css 文件將部署到同級“min”目錄中。
(縮小.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
我想改進 megre ( https://stackoverflow.com/a/53678752/760777 ) 的答案。 他的解決方案有效,但可以改進。 盡管如此,所有的功勞都歸功於他。
在第 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://stackoverflow.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 文件中的引用。
您還可以使用 Node.js 進行批量縮小。 但是,此選項僅適用於 Linux 用戶(目前)。
每當某個軟件包嚴重缺乏便利性 (Eclipse) 或 builder 批處理格式太瘋狂 (ANT) 時,就會有人聰明地出現並創造出一些很棒的東西。
在這種情況下,
這太棒了。
只是想我會更新這個問題並添加答案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.