Ant使用exec目标编译Coffee Scripts

时间:2011-07-11 17:05:13

标签: ant compiler-errors exec coffeescript

我有一个使用一些Coffee Script的Ant项目。我想Ant编译所有的咖啡,而不是有另一个构建步骤来编译它。我想要使​​用的咖啡命令行脚本,将所有咖啡文件编译成同步js文件(site.coffee编译为site.js,app.coffee编译为app.js):

coffee -c ./js/*.coffee

我创建了一个Ant任务,我假设它会运行相同的命令,但是收到错误:

<target name="compilecoffee" description="Compiles coffeescript files">
    <exec executable="coffee">
        <arg value="-c ${env.WORKSPACE}js/*.coffee" />
    </exec>
</target>

现在当我运行ant compilecoffee -Denv.WORKSPACE=./时,我从Coffee收到以下错误:

Buildfile: /Users/dave/Workspace/ColdFusion/Mura-Themes/e123-1/build.xml

compilecoffee:
     [exec] 
     [exec] node.js:116
     [exec]         throw e; // process.nextTick error, or 'error' event on first tick
     [exec]         ^
     [exec] Error: unrecognized option: -c ./js/3_site.coffee
     [exec]     at OptionParser.parse (/Users/dave/local/lib/node/.npm/coffee-script/1.1.1/package/lib/optparse.js:34:17)
     [exec]     at /Users/dave/local/lib/node/.npm/coffee-script/1.1.1/package/lib/command.js:245:29
     [exec]     at Object.run (/Users/dave/local/lib/node/.npm/coffee-script/1.1.1/package/lib/command.js:24:5)
     [exec]     at Object.<anonymous> (/Users/dave/local/lib/node/.npm/coffee-script/1.1.1/package/bin/coffee:7:27)
     [exec]     at Module._compile (module.js:373:26)
     [exec]     at Object..js (module.js:379:10)
     [exec]     at Module.load (module.js:305:31)
     [exec]     at Function._load (module.js:271:10)
     [exec]     at Array.<anonymous> (module.js:392:10)
     [exec]     at EventEmitter._tickCallback (node.js:108:26)
     [exec] Result: 1

如果我跑,我想的是,咖啡等于直接在命令行(coffee -c ./js/*.coffee)我得到没有错误,一切都按预期工作。我使用exec目标错了吗?

2 个答案:

答案 0 :(得分:4)

尝试=

<arg line="-c ${env.WORKSPACE}js/*.coffee" />

或对命令的每个部分使用一个arg value = ...

<target name="compilecoffee" description="Compiles coffeescript files">
 <exec executable="coffee">
  <arg value="-c"/>
  <arg value="${env.WORKSPACE}js/*.coffee" />
 </exec>
</target>

咖啡可执行文件必须在路径上或使用=

<exec executable="full/path/to/coffee">

修改

正如Dominic所指出的那样,'*'不会被扩展,所以你应该使用apply =

 <apply executable="coffee">
  <arg value="-c"/>
  <fileset dir="${env.WORKSPACE}js" includes="**/*.js"/>
 </apply>

Ant Manual apply task f.e.你可以使用parallel =“true”,意味着只运行一次命令,将所有文件作为参数附加,如果可能的话加上咖啡,以加快速度。

答案 1 :(得分:2)

实际上,您可以通过以下方式实现这一目标:

<target name="compile-coffee" description="Compiles coffeescript into the javascript dir">
  <exec executable="coffee">
    <arg value="-c" />
    <arg value="--output" />
    <arg value="${javascript_dir}" />
    <arg value="${cofeescript_dir}" />
  </exec>
</target>

其中javascript_dir指向您的js目录(目标),coffeescript_dir指向您的coffeescript目录(原点)。

*当然,如果您只是想编译,可以省略--output和javascript_dir。