我最近一直在努力解决一个关于在我们的 ant 构建任务的压缩/最小化阶段编译 javascript 正则表达式的问题。
基本上,问题在于每个 javascript 正则表达式,即:
var x = y.replace(/(\d|\.)/g, '');
获取其转义字符并替换如下:
var x = y.replace(/(d|.)/g, '');
这变得非常烦人,因为项目进展迅速,而我的测试由于构建阶段的这些问题而不断失败。
这些是我尝试过的事情:
编译器工具:
形成正则表达式的不同方法:
// Same problem occurs when regex placed inside a string
var x = y.replace(new RegExp('(\\d|\\.)', 'g'), '');
从 Ant 中调用编译器/压缩器的不同方法:
<!-- Closure Compiler Ant Task -->
<taskdef name="jscomp" classname="com.google.javascript.jscomp.ant.CompileTask"
classpath="lib/compiler.jar"/>
<!-- Executable called from command line -->
<exec executable="java" dir=".">
<arg line="-jar lib/compiler.jar" />
<!-- other args -->
</exec>
运行 Ant 任务的不同操作系统:
- Mac OSX
- Windows 7的
- Unix
关于如何在这里进行的任何想法?
我发现 Closure Compiler 和 YUI Compressor 都会遇到解析正则表达式的问题,这太巧合了,所以问题可能出在其他地方......
非常感谢任何输入。
更新
正如下面的 Chad 所提到的,Closure Compiler 服务没有报告同样的问题,这意味着问题一定出在 ANT(或底层控制台进程)处理输入/输出字符串的方式上。
目前完成的方法是通过(google)编译器ant任务,使用相同的文件作为进程的输入和输出(注意,通过使用命令行调用发生了同样的问题)。
<!-- CLOSURE COMPILER MACRO -->
<!-- @see http://code.google.com/p/closure-compiler/wiki/BuildingWithAnt -->
<macrodef name="compile">
<attribute name="file" />
<sequential>
<echo>Compiling @{file}</echo>
<jscomp compilationLevel="simple" warning="quiet"
debug="false" output="@{file}">
<sources dir=".">
<file name="@{file}"/>
</sources>
</jscomp>
</sequential>
</macrodef>
<!-- ACTUAL USAGE -->
<compile file="${local.output.dir}/app.js" />