10

在 Jenkins CI 服务器上运行的 ant 构建任务期间,我们使用 YUI 压缩器压缩我们的 javascript(和 css 文件)。但是,很难确定 YUI 压缩器与哪些 js 文件有错误。我们看到了很多类似的东西:

[minify-js] [错误] 3:35:未终止的字符串文字
[缩小-js]
[minify-js] [错误] 3:35:语法错误
[缩小-js]
[minify-js] [错误] 4:8: 语法错误
[缩小-js]
[minify-js] [ERROR] 1:0:编译产生 3 个语法错误。
[minify-js] org.mozilla.javascript.EvaluatorException:编译产生 3 个语法错误。
[minify-js] 在 com.yahoo.platform.yui.compressor.YUICompressor$1.runtimeError(YUICompressor.java:135)
[minify-js] 在 org.mozilla.javascript.Parser.parse(Parser.java:410)
[minify-js] 在 org.mozilla.javascript.Parser.parse(Parser.java:355)
[minify-js] 在 com.yahoo.platform.yui.compressor.JavaScriptCompressor.parse(JavaScriptCompressor.java:312)
[minify-js] 在 com.yahoo.platform.yui.compressor.JavaScriptCompressor.(JavaScriptCompressor.java:533)
[minify-js] 在 com.yahoo.platform.yui.compressor.YUICompressor.main(YUICompressor.java:112)
[minify-js] 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[minify-js] 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
[minify-js] 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[minify-js] 在 java.lang.reflect.Method.invoke(Method.java:616)
[minify-js] 在 com.yahoo.platform.yui.compressor.Bootstrap.main(Bootstrap.java:20)
[minify-js] 结果:2

在输出中,但我不知道错误来自数百个 JS 文件中的哪个。我们的 ant 任务如下所示:

<target name="minify-js">
    <apply executable="yuicompressor" parallel="false" dest="${global.dir}/" taskname="minify-js" force="true">
        <fileset dir="${global.dir}/" includes="**/*.js">
            <exclude name="*.min.js" />
        </fileset>
        <arg value="--type=js" />
        <srcfile />
        <arg value="-o" />
        <targetfile />
        <mapper type="identity" />
    </apply>
</target>

不是 Ant 或 YUI 压缩器方面的专家,我们有什么办法可以将发生错误的文件名输出到某处?

4

3 回答 3

6

我不知道 yuicompressor 是如何工作的,我假设它一次只能处理一个文件。

如果这是真的,您可以使用for from ant-contrib来完成。您需要事先安装ant-contrib 。

<taskdef resource="net/sf/antcontrib/antcontrib.properties" classpath="${global.dir}/bin_data/ant-contrib-0.6.jar"/>
<for param="file">
  <path>
    <fileset dir="${global.dir}/" includes="**/*.js">
      <exclude name="*.min.js" />
    </fileset>
  </path>
  <sequential>
    <echo>youcompressor for @{file}</echo> <!-- Will output each file and help debugging -->
    <exec executable="yuicompressor"> <!-- I took the args from the official documentation-->
      <arg value="--type=js" />
      <arg value="-o" />
      <arg value="'.js$:-min.js'" />
      <arg value="@{file}" />
    </exec>
  </sequential>
</for>
于 2012-05-11T07:01:14.327 回答
2

尝试使用此选项:

-v, --verbose 显示信息性消息和警告。

对于像您这样的案例,文档中有一个很好的条目:

不要犹豫,使用 -v 选项。虽然不是 JSLint 的替代品,但当它感觉到您的代码可能有问题时,它会输出一些有用的提示。

于 2012-05-04T20:21:49.470 回答
2

你试过了吗

<apply … verbose="true">

执行后是否打印摘要。从蚂蚁 1.6.

理想情况下,它会在尝试对文件执行之前打印一条语句,但之后有一个摘要至少可以让您看到最后一个成功的文件,这应该指向损坏的文件,因为文件集通常是按字母数字顺序排列的。

于 2012-05-11T06:31:46.073 回答