2011-01-27 17 views
9

Vorrei creare un'attività di Cakefile per guardare alcuni file CoffeeScript come se avessi eseguito coffee -c -w js/*.coffee.Uscita durante la visualizzazione di file CoffeeScript da un'attività cakefile

Lo sta guardando e ricompilando con successo, ma non registra il solito output sul terminale quando c'è un errore di compilazione come sarebbe se avessi appena eseguito lo script dal terminale. Qualche idea su come farlo accadere?

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 

Inoltre, se c'è un modo migliore per richiamare un comando CoffeeScript da un cakefile che correre 'exec' si prega di inviare anche questo.

risposta

6

spawn anziché exec?

{spawn} = require 'child_process' 

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

'customFds' è deprecato: http : //nodejs.org/api/child_process.html. la soluzione di Daniela ha funzionato come un fascino per me. – Zeke

+0

Puoi anche usare 'stdio: 'inherit'' invece di' customFds: [0..2] '. – epidemian

2

Il problema con il codice originale era che exec chiama solo la sua richiamata una volta dopo che il processo figlio è terminato. (La documentazione nodo non sono così chiari su questo.) Così, invece di definire che richiamata, si dovrebbe cercare invece

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

fatemi sapere se che funziona per voi.

+0

'sys' non è stato definito e ho usato console.log invece di stampare:' '' child.stdout.on 'data', (data) -> console.log data''' – Pirijan

4

ho usato uova di risolvere questo, ecco un esempio di file torta:

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

si può vedere in azione con il progetto Docco: https://github.com/jashkenas/docco/blob/master/Cakefile

Problemi correlati