2013-11-22 11 views
6

Sto riscontrando qualche difficoltà con un'attività Grunt che sto creando. Sto cercando di eseguire l'installazione di npm, seguita da bower install, seguita da una destinazione hub grunt (per attivare un comando build per più sottoprogetti).Node JS - figlio_processo spawn ('npm install') nell'attività Grunt risulta nell'errore ENOENT

Il problema che sto incontrando si trova in child_process. Ottengo l'errore ENOENT deporre le uova se corro i seguenti comandi nel mio compito grugnito, con il NPM installazione comando spawn che è attualmente commentata:

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); 
     }); 

il codice corrente (con ls al posto di NPM installa) si traduce in:

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 

ma se cambio 'ls' a 'NPM install' ricevo invece `` Fatal error: uova ENOENT

subito dopo la stampa ENV.

Ho provato chmod 777 per quella directory, che non sembra essere d'aiuto.

ho anche provato:

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

e

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

I risultati precedenti in

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

tardo risultati ancora nell'errore ENOENT.

Qualsiasi aiuto con esattamente ciò che questo errore ENOENT è probabilmente sarebbe di grande aiuto; Non ho avuto molto successo con Google su Google né con il child process API docs

risposta

7

Controlla nuovamente i documenti su child_process.spawn di nuovo. Il primo argomento dovrebbe essere solo il comando da eseguire e il secondo è gli argomenti:

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

Che ha funzionato perfettamente. Non riesco a credere a quanto sia facile/ovvia la soluzione una volta che l'hai fornita, o quanto sia difficile evitarlo. Grazie mille! – zedd45

+2

per riferimento futuro di possibili visitatori, http://stackoverflow.com/questions/27688804/how-to-debug-any-node-js-child-process-error-spawn-enoent – laconbass

+0

Hmm, questo non ha funzionato per me. Ancora ottenere spawnSync npm ENOENT (sì sto usando la versione di sincronizzazione) – ianbeks