我正试图使用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>
此外,奇怪的是,输出文件以一个空格字符开头,我似乎无法摆脱这个字符。如有任何帮助,我们将不胜感激。
在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>
尝试:
...
<arg line="-f compiled-templates.js"/>
...
而不是:
...
<arg value="-f compiled-templates.js"/>
...
使用<script>
任务,在其中可以嵌入执行迭代工作的Javascript或Groovy代码。调用一些shorts脚本来帮助解决此类问题是一种很好的做法,因为它们通常比复杂的XML循环条件表示法更具表达能力。
我最终使用了一个<concat>
任务,从所有模板中创建一个文件,并在该文件上运行一次可执行文件。
<concat destfile="all.handlebars" append="true">
<fileset dir="." includes="**/templates/">
<include name="*.handlebars"/>
</fileset>
</concat>