我想制作一个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',请发布它。
答案 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
请告诉我这是否适合您。