9

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

此外,如果有比运行 'exec' 更好的方法从 cakefile 调用 coffeescript 命令,请也发布。

4

3 回答 3

6

spawn而不是exec

{spawn} = require 'child_process'

task 'watch', -> spawn 'coffee', ['-cw', 'js'], customFds: [0..2]
于 2011-01-28T02:02:34.207 回答
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

于 2011-09-11T03:17:33.050 回答
2

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

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

让我知道这是否适合你。

于 2011-02-03T19:31:17.463 回答