2011-01-27 4 views
9

coffee -c -w js/*.coffeeを実行した場合と同じように、CoffeeScriptファイルを見るためのCakefileタスクを作りたいと思います。cakefileタスクからCoffeeScriptファイルを見たときの出力

正常に視聴して再コンパイルしますが、端末からスクリプトを実行したようなコンパイルエラーが発生した場合は、通常の出力を端末に記録しません。どのようにこれを行うにはどのようなアイデア?

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のコマンドを呼び出すためのより良い方法があるかどうすぎていることを投稿してください。

答えて

6

spawnexecの代わりに?

{spawn} = require 'child_process' 

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

'customFds'は廃止されます。http ://nodejs.org/api/child_process.html。ダニエルの解決策は私の魅力のように働いた。 – Zeke

+0

'customFds:[0..2]'の代わりに 'stdio: 'inherit''を使うこともできます。 – epidemian

2

あなたの元のコードの問題はexecは一度だけ、後にコールバックを呼び出すことを子プロセスが終了していました。したがって、そのコールバックを定義するのではなく、代わりに試してみるべきです。

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

これはうまくいけば教えてください。

+0

'sys'が定義されておらず、printの代わりにconsole.logを使用しました:' '' child.stdout.on 'data'、(data) - > console.log data''' – Pirijan

4

私はここに、この問題を解決するために卵を使用しましたが、例えば、ケーキのファイルです:

{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

関連する問題