从 Ant 运行 YUI 压缩器时确定哪个文件有错误 [英] Determine which file has an error when running YUI compressor from Ant

查看:35
本文介绍了从 Ant 运行 YUI 压缩器时确定哪个文件有错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

<前>[minify-js] [ERROR] 3:35: 未终止的字符串文字[缩小-js][minify-js] [ERROR] 3:35: 语法错误[缩小-js][minify-js] [ERROR] 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 文件中的哪一个.我们的蚂蚁任务看起来像:

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

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

解决方案

我不知道 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="文件"><路径><fileset dir="${global.dir}/" includes="**/*.js"><exclude name="*.min.js"/></文件集></路径><顺序><echo>youcompressor for @{file}</echo><!-- 将输出每个文件并帮助调试--><exec executable="yuicompressor"><!-- 我从官方文档中获取了参数--><arg value="--type=js"/><arg value="-o"/><arg value="'.js$:-min.js'"/><arg value="@{file}"/></exec></顺序></for>

We compress our javascript (and css files) with YUI compressor during our ant build task running on our Jenkins CI Server. However, it is very difficult to determine which js files YUI compressor is having errors with. We see a bunch of things like:

[minify-js] [ERROR] 3:35:unterminated string literal
[minify-js] 
[minify-js] [ERROR] 3:35:syntax error
[minify-js] 
[minify-js] [ERROR] 4:8:syntax error
[minify-js] 
[minify-js] [ERROR] 1:0:Compilation produced 3 syntax errors.
[minify-js] org.mozilla.javascript.EvaluatorException: Compilation produced 3 syntax errors.
[minify-js]     at com.yahoo.platform.yui.compressor.YUICompressor$1.runtimeError(YUICompressor.java:135)
[minify-js]     at org.mozilla.javascript.Parser.parse(Parser.java:410)
[minify-js]     at org.mozilla.javascript.Parser.parse(Parser.java:355)
[minify-js]     at com.yahoo.platform.yui.compressor.JavaScriptCompressor.parse(JavaScriptCompressor.java:312)
[minify-js]     at com.yahoo.platform.yui.compressor.JavaScriptCompressor.(JavaScriptCompressor.java:533)
[minify-js]     at com.yahoo.platform.yui.compressor.YUICompressor.main(YUICompressor.java:112)
[minify-js]     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[minify-js]     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
[minify-js]     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[minify-js]     at java.lang.reflect.Method.invoke(Method.java:616)
[minify-js]     at com.yahoo.platform.yui.compressor.Bootstrap.main(Bootstrap.java:20)
[minify-js] Result: 2

in the output, but I have no idea which of the hundreds of JS files the error is coming from. Our ant task looks like:

<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>

Not being an expert on Ant or YUI compressor, is there something we can do so that the filename where there error is happening is output somewhere?

解决方案

I don't know how the yuicompressor works, I assume that it works on one file at a time.

If this is true, you can do it with for from ant-contrib. You would need to install ant-contrib prior.

<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>

这篇关于从 Ant 运行 YUI 压缩器时确定哪个文件有错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆