Ant использует цель exec для компиляции Coffee Scripts - PullRequest
2 голосов
/ 11 июля 2011

У меня есть проект Ant, который использует немного Coffee Script. Я хотел бы, чтобы Ant скомпилировал весь кофе вместо того, чтобы делать еще один шаг сборки для его компиляции. Сценарий командной строки coffee, который я хочу использовать, который компилирует все файлы coffee в синонимичные 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 ]

4 голосов
/ 11 июля 2011

try =

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

или используйте одно значение arg = ... для каждой части команды

<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">

EDIT

как указал Доминик, '*' не будет расширяться, поэтому вы должны использовать apply =

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

см. Задача Ant по применению вручную f.e. вы можете использовать parallel = "true", что означает запуск команды только один раз, добавление всех файлов в качестве аргументов, если возможно с кофе, чтобы ускорить ее.

2 голосов
/ 11 июля 2013

На самом деле, вы можете достичь этого, выполнив что-то вроде:

<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, если вы просто хотите скомпилировать на месте.

...