4

Eclipse PDT在文件的上下文菜单中有这个方便的内置Yui 压缩器。但是,在构建使用多个此类文件的 web 应用程序时,每次更新后手动压缩文件变得乏味。它甚至不记得哪些文件压缩到哪些文件名,因此您必须再次输入。

是否可以在 Eclipse 中轻松地自动化此过程,因此您可以单击“构建”或其他东西,所有指定的文件都将被压缩到它们的目标?

关于 Eclipse 中这个 Yui 特性的文档确实存在真空。

我正在使用带有 PDT 3.0.0.v20110516-11 的 Eclipse Indigo 3.7.0,但自 Galileo 以来,PDT 和 Yui 选项都非常相似

-更新-

自动化解决方案,不是 Eclipse 原生的,但很接近:

  • GNU 制作 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 Shell脚本

    ls -1 *.js | awk '{printf("java -jar yuicompressor.jar %s -o deploy/%s",$1,$1)}' | /bin/sh
    
  • 蚂蚁文件

    见这里: http ://www.ubik-ingenierie.com/ubikwiki/index.php?title=
    Minifying_JS/CSS 我如何在这里粘贴html/xml?

另请参阅问题。

4

4 回答 4

5

好吧,我实际上下载了 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>
于 2012-02-14T16:21:43.117 回答
1

您可以通过批量配置和添加外部工具(适用于 Windows 用户)来选择和“构建”js/css 资源。

这使得只需按一个按钮即可缩小。(它不是运行配置的一部分。)

前提条件: - 必须安装 Java。- 您必须下载 yuicompressor。(目前官方下载页面在这里:https ://github.com/yui/yuicompressor/releases )

Step1:将“yuicompressor”和“minify.bat”(如下所示)添加到您的项目中。

在此处输入图像描述

步骤2:配置一个名为“Minify”的外部工具(转到菜单运行 -> 外部工具 -> 外部工具配置)。

在此处输入图像描述 在此处输入图像描述 在此处输入图像描述

Step3:选择资源(js/css)或包含资源的目录,点击“Minify”。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
于 2018-12-08T01:36:23.663 回答
1

我想改进 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 文件中的引用。

于 2020-05-27T15:21:41.703 回答
0

您还可以使用 Node.js 进行批量缩小。 但是,此选项仅适用于 Linux 用户(目前)。

每当某些软件包非常缺乏便利性(Eclipse)或构建器批处理格式很疯狂(ANT)时,就会有聪明的人出现并创建一些很棒的东西。

在这种情况下,

这太棒了。

只是想我会更新这个问题并添加答案。

于 2013-09-21T18:45:39.597 回答