Вывод при просмотре файлов CoffeeScript из задачи торт-файл - PullRequest
9 голосов
/ 27 января 2011

Я хотел бы сделать задачу Cakefile, чтобы посмотреть некоторые файлы CoffeeScript, как если бы я запустил coffee -c -w js/*.coffee.

Он успешно просматривает и перекомпилирует их, но не регистрирует обычный вывод в терминал, когда возникает ошибка компиляции, как если бы я только запускал скрипт из терминала. Есть идеи, как это сделать?

exec = require('child_process').exec

task 'watch','watch all files and compile them as needed', (options) ->
    exec 'coffee -c -w js/*.coffee', (err,stdout, stderr) ->
        console.log stdout

Кроме того, если есть лучший способ вызвать команду coffeescript из файла тортов, чем запуск exec, пожалуйста, опубликуйте это тоже.

Ответы [ 3 ]

6 голосов
/ 28 января 2011

spawn вместо exec?

{spawn} = require 'child_process'

task 'watch', -> spawn 'coffee', ['-cw', 'js'], customFds: [0..2]
4 голосов
/ 11 сентября 2011

Я использовал spawn для решения этой проблемы, вот пример файла торта:

{spawn, exec} = require 'child_process'

option '-p', '--prefix [DIR]', 'set the installation prefix for `cake install`'

task 'build', 'continually build with --watch', ->
    coffee = spawn 'coffee', ['-cw', '-o', 'lib', 'src']
    coffee.stdout.on 'data', (data) -> console.log data.toString().trim()

Вы можете увидеть это в действии с проектом Docco: https://github.com/jashkenas/docco/blob/master/Cakefile

2 голосов
/ 03 февраля 2011

Проблема с вашим исходным кодом заключалась в том, что exec вызывает свой обратный вызов только один раз - после завершения дочернего процесса.(Документы по Узлу не очень понятны по этому вопросу.) Поэтому вместо определения этого обратного вызова вы должны вместо этого попробовать

child = exec 'coffee -c -w js/*.coffee'
child.stdout.on 'data', (data) -> sys.print data

Дайте мне знать, если это работает для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...