如何在 Ant 构建脚本中为 javascript 和 css 使用 YUI Compressor

Posted

技术标签:

【中文标题】如何在 Ant 构建脚本中为 javascript 和 css 使用 YUI Compressor【英文标题】:How to use YUI Compressor in Ant build script for javascript and css 【发布时间】:2013-05-11 20:09:58 【问题描述】:

在寻找如何在 Ant 构建脚本中使用 YUI 压缩器的几天后,我终于让它工作了。存在许多用于创建 Ant 任务并在构建脚本中使用它的旧示例(

许多示例也很老旧,需要更多有关 Ant 或配置 Ant 任务的知识。下面的解决方案对我来说是快速、简单和有效的解决方案。

【问题讨论】:

【参考方案1】:

以下内容已添加到我的<target> 标记之一中,以压缩单个目录中的 所有 javascript 文件。这些文件保留其原始名称。要为 CSS 执行此操作,只需将“js”切换为“css”并相应地更新路径。

这是使用 YUI Compressor 2.4.7 完成的,我在 Eclipse Juno 中运行 Ant 构建脚本,无需更改类路径或其他设置修改。

<!-- Minimizing Javascript files -->
    <echo message="Compressing Javascript files at location: $build.root/resources/js/*.js" />
    <java jar="c:/dev/lib/yuicompressor-2.4.7/build/yuicompressor.jar" fork="true">
        <arg value="$build.root/resources/js/*.js" /> <!-- input path for JS files -->
        <!--<arg value="-v" /> --><!-- Turn on verbose -->
        <arg value="-o" />
        <arg value="'.js$:.js'" />
        <arg value="$build.root/resources/js/*.js" /> <!-- output path for JS files -->
        <classpath>
            <pathelement location="c:/dev/lib/yuicompressor-2.4.7/build/yuicompressor.jar"/>
        </classpath>
    </java>

请随时改进此答案。上面的解决方案对我有用,但我不是专家。

【讨论】:

如何将所有.js文件压缩成一个.js文件? ?因为上面的脚本将.js文件压缩成自己的文件... 尽管路径存在,但它会为 - /home/shwetanka/projects/webapp/webapp/content/js/mobile/*.js 提供 FileNotFoundException。 @Shwetanka 如果你有一个问题,你应该创建自己的问题线程并参考这个答案来指出问题。 我很幸运/不幸地得到了我的 ant 脚本,但是在项目工作一段时间后,由于一些 js 文件,yui 压缩器正在归档项目的构建。有没有办法显示/记录罪魁祸首文件? @DarkStar1 不幸的是,我不知道有任何日志选项可以显示当前正在压缩的文件的文件名。您可以尝试运行您的 ant 构建并明确指定 javascript 文件的名称,而不是如上所示的 '*.js'。【参考方案2】:

我正在使用以下解决方案来缩小文件,因为我得到了 FileNotFoundException 和上一个答案。

要缩小 CSS,请将下面的 js 替换为 css

<target name="compress" description="compress the JS files">
    <copy todir="temp/js" overwrite="yes">
        <fileset dir="original/js"/>
    </copy>
    <apply executable="java" parallel="false" dest="temp/js">
        <fileset dir="temp/js" includes="**/*.js" />
          <arg line="-jar"/>
          <arg path="test_lib/yuicompressor-2.4.8.jar" />
          <arg line="-v"/>
          <srcfile/>
          <arg line="-o"/>
          <mapper type="glob" from="*.js" to="*-min.js"/>
          <targetfile/>
    </apply>
    <move todir="original/js" overwrite="true">
        <fileset dir="temp/js" />
        <mapper type="glob" from="*-min.js" to="*.js"/>
    </move>
</target>

【讨论】:

我在使用基于 html5boilerplate 项目的 Ant 脚本时遇到了同样的问题。您首先转到临时目录的解决方案似乎已经修复了它。【参考方案3】:

我尝试了 Victor 的代码。实际上不需要临时目录。我使用了这段代码,它对我有用。

    <apply executable="java" parallel="false" >
                <fileset dir="$build.root/resources/js" includes="**/*.js" />
                    <arg line="-jar"/>
                    <arg path="$basedirectory/yuicompressor-2.4.8.jar" />
                    <srcfile/>
                    <arg value="-o" />
                    <arg value="'.js$:.js'" />
                    <!-- output path for JS files -->
                    <arg value="$build.root/resources/js/*.js" />
                    <arg line="--nomunge" />
                    <arg line="--preserve-semi" />              
            </apply>

【讨论】:

我应该如何调整提供的解决方案以排除已经可用的“.min.js”文件再次被压缩。我尝试将值为 '"/.min.js"' 的 'excludes' 属性以及 "**/min" 添加到 '' 但这似乎不起作用。 它是“排除”而不是“排除”。 【参考方案4】:

我会使用这个 ant 任务:http://code.google.com/p/yui-compressor-ant-task/ 或这个:https://github.com/parambirs/ant-yui-compressor,这似乎比 apply 更简洁。

【讨论】:

非常好的解决方案。配置看起来非常简单。【参考方案5】:

您可以压缩特定文件夹中可用的所有 Js 文件,而无需复制到临时文件夹。

<property name="js.source" value="js/combine" />    
<property name="js.target" value="js/compress" />
<fileset dir="$yuicompressor.lib">
        <include name="yui/yuicompressor-2.4.z8.jar"/>
</fileset>
<target name="minifyjs" description="compress the JS files">
    <delete includeEmptyDirs="true">
      <fileset dir="$js.target" includes="**/*" defaultexcludes="no"/>
    </delete>
    <apply executable="java" parallel="false" verbose="true" failonerror="yes">
        <fileset dir="$js.source" includes="**/*.js" excludes="**/*-min.js, **/*.min.js"/>
          <arg line="-jar"/>
          <arg path="$yuicompressor.lib" />
          <srcfile/>
          <arg line="-o"/>
          <targetfile/>
          <mapper type="glob" from="*.js" to="$js.target/*.js"/>
          <arg line="--charset"/>
          <arg line="utf-8"/>
    </apply>
</target>

上面的代码对我来说工作正常。

【讨论】:

以上是关于如何在 Ant 构建脚本中为 javascript 和 css 使用 YUI Compressor的主要内容,如果未能解决你的问题,请参考以下文章

如何通过bash脚本检测ant / maven的构建错误?

如何在Javascript中为1到1000的奇数和偶数编写脚本?

如何在 Travis CI 中为 C++ 项目并行运行多个构建,每个构建都有单独的脚本?

如何在 Ant 目标中使用文件大小

在 Eclipse 中使用 ANT 脚本时如何调试 Java 代码

如何使用 CodeSandbox 在 LESS 中为 Ant Design (React) 创建自定义主题?