2011-01-27 10 views
9

मैं कुछ कॉफीस्क्रिप्ट फ़ाइलों को देखने के लिए केकफ़ाइल कार्य करना चाहता हूं जैसे कि मैंने 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' पोस्ट करें वह भी।

उत्तर

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

आप 'कस्टमएफडीएस: [0..2] 'के बजाय' stdio:' legisl'' 'का भी उपयोग कर सकते हैं। – epidemian

2

अपने मूल कोड के साथ समस्या यह है कि exec केवल अपने कॉलबैक एक बार के बाद बच्चे की प्रक्रिया समाप्त कर दिया है कॉल था। (नोड डॉक्स इस पर इतना स्पष्ट नहीं कर रहे हैं।) तो बजाय कि कॉलबैक को परिभाषित करने की, आप के बजाय

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

मुझे पता है कि अगर आप के लिए काम करता है की कोशिश करनी चाहिए।

{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 परियोजना के साथ कार्रवाई में इसे देख सकते हैं:

+0

'sys' परिभाषित नहीं किया गया था और मैंने प्रिंट के बजाय console.log का उपयोग किया:' '' child.stdout.on 'डेटा', (डेटा) -> console.log डेटा''' – Pirijan

संबंधित मुद्दे