grunt

2013-02-08 44 views
9

के साथ 2 async कार्यों को चला रहा है मैं एक छोटे नोड प्रोजेक्ट पर काम कर रहा हूं और मैं कॉफ़ीस्क्रिप्ट का उपयोग करता हूं और क्लाइंट-साइड कोड के लिए कम करता हूं। मैं grunt का उपयोग कर अपने विकास पर्यावरण स्थापित करने की कोशिश कर रहा हूँ। मैं इस तरह से चल रहा है सर्वर के लिए कस्टम घुरघुराना कार्य को क्रियान्वित किया है:grunt

grunt.initConfig 
    watch: 
     coffee: 
      files: ['public/coffee/**/*.coffee'] 
      tasks: ['coffee'] 
     jade: 
      files: ['public/jade/**/*.jade'] 
      tasks: ['jade'] 
     less: 
      files: ['public/less/**/*.less'] 
      tasks: ['less'] 

सवाल यह है::

start = require './start' #just a function to start express.js application 
grunt.registerTask 'server', 'Starting server', -> 
    grunt.log.write 'Preparing server to start' 
    done = do @async 
    start (err) -> 
     grunt.log.write "server running at localhost:4000" 

मैं भी घुरघुराना-योगदान-घड़ी प्लगइन का उपयोग कर "घड़ी" काम चलाना चाहते हैं कैसे इन दो कार्यों (घड़ी और सर्वर) को एक साथ चलाने के लिए? मैं एक सर्वर को चालू करना चाहता हूं और चलाना चाहता हूं और कुछ क्लाइंट-साइड कोड बदल जाने पर इसे फिर से लोड नहीं करना चाहता हूं। अग्रिम धन्यवाद

उत्तर

6

इसे अपने घड़ी कार्यों में उपसर्ग करें, और सर्वर कार्य के अंदर done = do @async से छुटकारा पाएं।

tasks: ['server', 'coffee']

आप को "लंबे समय से चल" या नहीं सर्वर कार्य के लिए अपने ग्रंट विन्यास में एक विकल्प निर्दिष्ट करना चाहते हैं। फिर आप @async पर कॉल कर सकते हैं केवल तभी जब आपको लंबे समय तक चलने की आवश्यकता हो (घड़ी के बिना)।

+1

इसका कारण यह है सर्वर काम नहीं करता है काम नहीं करता है अंत में, घड़ी घड़ी पर नियंत्रण कभी नहीं दे रहा है। – Griffin

+0

हां यह खत्म होता है; जैसा कि मैंने अपने उत्तर में समझाया है, आप async() कॉल को हटाते हैं जो कार्य को समाप्त करने की अनुमति देता है, और फिर सशर्त रूप से इसे किसी विकल्प के आधार पर वापस जोड़ता है। – tbranyen

+3

मैं उलझन में हूँ। वह चाहता है कि सर्वर हमेशा लंबे समय से चल रहा हो, और वह चाहता है कि घड़ी लंबे समय से चल रही हो और वह चाहता है कि वे दोनों एक ही समय में एक ही गलती कॉल से चल रहे हों। क्या आप यहां क्या हासिल कर रहे हैं? ऐसा नहीं लगता है –

0

मुझे यह एक ही मुद्दा था कि दोनों घड़ी को लॉन्च करने और सर्वर को एक गड़बड़ी से कनेक्ट करने में सक्षम न हो।

समस्या को हल करने के लिए, मैं अपने Gruntfile

grunt connect:preview & के अंत में एम्परसैंड (&) क्या एक पृष्ठभूमि प्रक्रिया के रूप में सर्वर शुरू होता है में घुरघुराना-कार्यकारी का उपयोग कर पृष्ठभूमि प्रक्रिया के रूप में सर्वर शुरू कर दिया।

,exec: { 
    start_server: { 
    command: 'grunt connect:preview &' 
    } 
} 

और फिर इस

grunt.registerTask('preview', ['clean:preview', 'template', 'exec', 'watch' ]); 

ऐसा करने के लिए एक बेहतर तरीका हो गया है की तरह घुरघुराना कार्य रजिस्टर, लेकिन अब तक यह सबसे अच्छा मैं के बारे में सोच सकता है।

+0

मैं grunt-exec की बजाय grunt-shell का उपयोग कर रहा हूं और '&' का कोई प्रभाव नहीं पड़ता है। –

7

आप इन दो संकुल के किसी भी उपयोग एक ही समय में दो या अधिक कार्य चला सकते हैं:

  1. grunt-parallel
  2. grunt-concurrent