开发者

Output when watching CoffeeScript files from a cakefile task

I would like to make a Cakefile task to watch some CoffeeScript files just like if I had run coffee -c -w js/*.coffee.

Its watching and recompiling them successfully, but it doesn't log the usual output to the terminal when there's a compile error like it would if I just ran the script from the terminal. 开发者_Go百科 Any idea how to make this happen?

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

Also, if there's a better way to invoke a coffeescript command from a cakefile than running 'exec' please post that too.


spawn instead of exec?

{spawn} = require 'child_process'

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


I've used spawn to solve this, here is an example cake file:

{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()

You can see it in action with the docco project: https://github.com/jashkenas/docco/blob/master/Cakefile


The problem with your original code was that exec only calls its callback once—after the child process has terminated. (The Node docs aren't so clear on this.) So instead of defining that callback, you should instead try

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

Let me know if that works for you.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜