我们在 Jenkins CI Server 上运行的 ant 构建任务期间使用 YUI 压缩器压缩我们的 JavaScript(和 css 文件(。 但是,很难确定哪些 js 文件存在错误 YUI 压缩器。 我们看到一堆东西,比如:
[缩小-js][错误] 3:35:未终止的字符串文本[缩小-js][缩小-js][错误] 3:35:语法错误[缩小-js][缩小-js][错误] 4:8:语法错误[缩小-js][缩小-js][错误] 1:0:编译产生 3 个语法错误。[minify-js] org.mozilla.javascript.EvaluatorException:编译产生了 3 个语法错误。[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([缩小-js]结果:2
在输出中,但我不知道错误来自数百个 JS 文件中的哪个。 我们的蚂蚁任务如下所示:
<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 压缩器的专家,我们是否可以做些什么来将发生错误的文件名输出到某处?
yuicompressor 是如何工作的,我假设它一次只能处理一个文件。
如果这是真的,你可以从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>
尝试使用此选项:
-v, --verbose 显示信息性消息和警告。
对于像您这样的案例,文档中有一个很好的条目:
不要犹豫,使用 -v 选项。虽然不能替代 JSLint,当它检测到 您的代码可能有问题。
你试过吗
<apply … verbose="true">
执行后是否打印摘要。从蚂蚁 1.6 开始。
理想情况下,它会在尝试对文件执行之前打印一条语句,但之后有一个摘要至少可以让您看到最后一个成功的文件,该文件应该指向损坏的文件,因为文件集通常是按字母数字顺序排列的。