使用Ant在多个文件上运行单个命令

时间:2012-03-12 17:23:49

标签: javascript ant handlebars.js

我正在尝试使用ant将一堆把手模板编译成单个编译文件。我有许多文件夹,每个文件夹包含大约4个模板,我想将这些文件全部编译成一个文件。使用以下文件夹:

folder01
  |- templates
       |- f1_01.handlebars
       |- f1_02.handlebars
       |- f1_03.handlebars
       |- f1_04.handlebars
folder02
  |- templates
       |- f2_01.handlebars
       |- f2_02.handlebars
       |- f2_03.handlebars
       |- f2_04.handlebars
build.xml

我基本上想要运行命令:

handlebars **/templates/*.handlebars -f compiled-templates.js

我尝试了以下内容,但它似乎只在输出js文件中包含1个文件。

<macrodef name="handlebars">
    <attribute name="target"/>
    <sequential>
        <apply executable="${handlebars}" failonerror="false">
            <fileset dir="." includes="**/templates/">
                <include name="*.handlebars"/>
            </fileset>
            <arg value="-f compiled-templates.js"/>
        </apply>
    </sequential>
</macrodef>

另外,奇怪的是,输出文件以空格字符开头,我似乎无法摆脱它。任何帮助将不胜感激。

4 个答案:

答案 0 :(得分:2)

在stackoverflow上搜索了很多,更重要的是,阅读文档后我想出了这个有效的解决方案。

<echo level="info" message="Pre Compiling templates" />
<apply parallel="true" failonerror="true" executable="node">
  <arg value="${webclient.dir.build}/node_modules/handlebars/bin/handlebars" />
  <srcfile />
  <fileset dir="${webclient}/app/templates" includes="**/*.handlebars"/>
  <arg line="-f ${webclient}/app/templates/handlebars.templates.js -m -a" />
</apply>

答案 1 :(得分:1)

尝试:

...
<arg line="-f compiled-templates.js"/>
...

而不是:

...
<arg value="-f compiled-templates.js"/>
...

答案 2 :(得分:0)

使用<script>任务,您可以在其中嵌入执行迭代工作的Javascript或Groovy代码。调用一些短脚本作为这些问题的帮助是一种很好的做法,因为它们通常比棘手的XML循环条件符号更具表现力。

答案 3 :(得分:-2)

我最终使用<concat>任务,从所有模板中创建一个文件,并在该文件上运行一次可执行文件。

<concat destfile="all.handlebars" append="true">
    <fileset dir="." includes="**/templates/">
        <include name="*.handlebars"/>
    </fileset>
</concat>