2013-11-22 12 views
6

में मुझे एक ग्रंट कार्य के साथ कुछ कठिनाई हो रही है जिसे मैं संलेखन कर रहा हूं। मैं एनपीएम इंस्टॉलेशन निष्पादित करने की कोशिश कर रहा हूं, इसके बाद बॉवर इंस्टॉलेशन के बाद, एक ग्रंट हब लक्ष्य (एकाधिक उप-प्रोजेक्ट्स के लिए बिल्ड कमांड ट्रिगर करने के लिए) के बाद।नोड जेएस - ग्रीन कार्य परिणामों में नोड जेएस - child_process spawn ('npm install') ENOENT त्रुटि

मुझे जिस समस्या का सामना करना पड़ रहा है वह child_process के साथ है। में परिणाम (NPM के बजाय स्थापित ls साथ)

var path = require('path'), 
     projectPath = path.resolve(process.cwd(), this.data.activity); 

     grunt.log.debug('project path computed as: ', projectPath); 
     process.chdir(projectPath); 

     console.log('current dir is: ', process.cwd()); 
     console.log('EVN is: ', process.env); 

     var spawnProcess = spawn('ls'); 
     // var spawnProcess = spawn('npm install'); 

     spawnProcess.stdout.on('data', function (data) { 
      console.log('' + data); 
     }); 

     spawnProcess.stderr.on('data', function(data) { 

      console.log('something went wrong installing deps for ' + path + '. Error: ', data); 
     }); 

     spawnProcess.on('close', function (exitCode) { 

      console.log('ls has finished with Exit Code: ' + exitCode); 
     }); 

वर्तमान कोड:: मैं अंडे ENOENT त्रुटि अगर मैं अपने घुरघुराना कार्य में निम्न कमांड चलाने मिलता है, NPM साथ अंडे आदेश है कि वर्तमान में बाहर टिप्पणी की है स्थापित

running "install:projects" (install) task[D] Task source: /Users/zedd45/proj/Gruntfile.js 
Verifying property install.projects exists in config...OK 
File: [no files] 
[D] project path computed as: /Users/zedd45/proj/activity/web/client 
current dir is: /Users/zedd45/proj/activity/web/client 
EVN (abbreviated) is: { 
    TERM_PROGRAM: 'iTerm.app', 
    SHELL: '/bin/bash', 
    PWD: '/Users/zedd45/proj', 
... 
    OLDPWD: '/Users/zedd45/proj/activity/web/client', 
    _: '/usr/local/bin/grunt' } 

GruntFile.js 
bower.json 
package.json 
this_is_the_directory_you_are_looking_for.txt 
ls has finished with Exit Code: 0 

लेकिन अगर मैं करने के लिए 'ls' बदल 'NPM स्थापित' मैं बजाय `` गंभीर त्रुटि मिलती है: अंडे ENOENT

तुरंत ENV प्रिंट निम्नलिखित।

मैंने उस निर्देशिका के लिए chmod 777 की कोशिश की है, जो मदद नहीं करता है।

मैं भी कोशिश की है:

Warning: Object # has no method 'slice' Use --force to continue.

बाद में अभी भी ENOENT त्रुटि में परिणाम में

// var spawnProcess = spawn('npm install', {'cwd': projectPath}); 

और

// var spawnProcess = spawn('npm install', [], {'cwd': projectPath}); 

पूर्व का परिणाम है।

इस ईनोन्ट त्रुटि के ठीक से कोई मदद शायद एक बड़ी सौदा में मदद करेगी; मुझे गुगलिंग के साथ बहुत सफलता नहीं मिली है और न ही child process API docs

उत्तर

7

दो बार baby_process.spawn पर दस्तावेज़ों को दोबारा जांचें। पहला तर्क केवल आदेश को चलाने के लिए किया जाना चाहिए और दूसरा तर्क है:

var npm = spawn('npm', ['install'], { cwd: projectPath }); 
+1

कि पूरी तरह से काम किया। मैं विश्वास नहीं कर सकता कि समाधान प्रदान करने के बाद समाधान कितना आसान/स्पष्ट था, या यह मुझे कितना मुश्किल लगा। बहुत बहुत धन्यवाद! संभावित आगंतुकों के भविष्य के संदर्भ के लिए – zedd45

+2

, http://stackoverflow.com/questions/27688804/how-to-debug-any-node-js-child-process-error-spawn-enoent – laconbass

+0

हम्म, यह काम नहीं करता है मुझे। अभी भी एक spawnSync npm ENOENT प्राप्त कर रहा है (हाँ मैं सिंक संस्करण का उपयोग कर रहा हूँ) – ianbeks