我有一个使用一些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目标错了吗?
答案 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。