从cakefile任务中观察CoffeeScript文件时的输出

时间:2011-01-27 17:34:35

标签: coffeescript

我想制作一个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

另外,如果有更好的方法从cakefile调用coffeescript命令而不是运行'exec',请发布它。

3 个答案:

答案 0 :(得分:6)

spawn而不是exec

{spawn} = require 'child_process'

task 'watch', -> spawn 'coffee', ['-cw', 'js'], customFds: [0..2]

答案 1 :(得分:4)

我用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 :(得分:2)

原始代码的问题是exec仅在子进程终止后调用其回调一次。 (Node文档对此不太清楚。)因此,不应该定义该回调,而应该尝试

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

请告诉我这是否适合您。