2013-02-23 74 views
13

के माध्यम से नोड ऐप चलाना मैं अपने नोड एप्लिकेशन को ग्रंट कार्य के रूप में चलाने की कोशिश कर रहा हूं। मुझे इसे बाल प्रक्रिया के रूप में उभारा है, हालांकि, मुझे समानांतर में घड़ी कार्य चलाने की अनुमति देने के लिए।ग्रंट

यह काम करता है:

grunt.registerTask('start', function() { 
    grunt.util.spawn(
    { cmd: 'node' 
    , args: ['app.js'] 
    }) 

    grunt.task.run('watch:app') 
}) 

हालांकि, जब परिवर्तन घड़ी कार्य द्वारा पता लगाया जाता है, यह शुरुआत कार्य फिर से ट्रिगर किया जाएगा। मेरे नोड ऐप की एक अन्य बाल प्रक्रिया को जन्म देने से पहले, मुझे पिछले एक को मारने की जरूरत है।

मैं यह नहीं समझ सकता कि प्रक्रिया को कैसे मारना है, हालांकि। कुछ इस तरह काम नहीं करता:

var child 

grunt.registerTask('start', function() { 
    if (child) child.kill() 
    child = grunt.util.spawn(
    { cmd: 'node' 
    , args: ['app.js'] 
    }) 

    grunt.task.run('watch:app') 
}) 

ऐसा नहीं है कि प्रतीत होता है:

  1. हालांकि मैं समारोह संदर्भ के बाहर एक चर में पैदा की प्रक्रिया की दुकान है, यह मौजूद नहीं होता है, तो अगली बार कार्य शुरू हो गया है, बच्चा undefined है।
  2. child कोई kill समारोह ...

उत्तर

4

इसका कारण यह है grunt-contrib-watch वर्तमान में सभी कार्य बच्चे प्रक्रियाओं के रूप में चलता spawns है। तो परिवर्तनीय child एक ही प्रक्रिया संदर्भ में नहीं है। बहुत जल्द, [email protected]nospawn विकल्प के साथ जारी किया जाएगा। यह आपको उसी संदर्भ में कार्य रनों को बढ़ाने के लिए घड़ी को कॉन्फ़िगर करने देगा और आपके उपर्युक्त उदाहरण को काम करेगा।

एक छोटे से अधिक जानकारी के लिए इस मुद्दे पर एक नज़र डालें:

https://github.com/gruntjs/grunt-contrib-watch/issues/45

+0

मैंने अपने 'ग्रंट-कॉन्ट्रिब-घड़ी' मॉड्यूल को [nospawn] (https://github.com/gruntjs/grunt-contrib-watch/tree/nospawn) शाखा के साथ बदल दिया है और 'nospawn' सेट किया है सही करने का विकल्प: https://gist.github.com/OliverJAsh/5021187। 'फ़ंक्शन' अभी भी दूसरी फ़ंक्शन कॉल पर परिभाषित नहीं है। साथ ही, क्या आप जानते हैं कि मैं बाल प्रक्रिया को कैसे मार सकता हूं? –

+0

Gruntfile एक जेएसएस फ़ाइल नहीं है, केवल एक जेएस फ़ाइल है। आपको grunt.task.run() के साथ घड़ी कार्य को कॉल करने की आवश्यकता नहीं है। संदर्भ साझा करने के लिए घड़ी का उपयोग करके यहां एक उदाहरण दिया गया है: https://github.com/gruntjs/grunt-contrib-watch/blob/nospawn/test/fixtures/nospawn/Gruntfile.js#L35 –

+1

बाल प्रक्रिया को मारने के लिए: 'child.kill ('SIGINT');' –

5

जो एक बच्चे की प्रक्रिया को उत्पन्न करने से संबंधित सिर दर्द का एक बहुत संभालती grunt-nodemon पर एक नजर डालें।