Node JS - child_process spawn ('npm install') в результате выполнения задачи Grunt при ошибке ENOENT

У меня возникают трудности с заданием Grunt, которое я создаю. Я пытаюсь выполнить npm install, а затем bower install, а затем целевую концентрацию grunt (для запуска команды сборки для нескольких подпроектов).

Проблема, с которой я сталкиваюсь, связана с child_process. Я получаю ошибку появления ENOENT, если я запускаю следующие команды в моей задаче grunt, с командой npm install spawn, которая в настоящее время закомментирована:

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

текущий код (с ls вместо npm install) приводит к:

   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 install', я получаю вместо этого `` Неустранимая ошибка: spawn ENOENT

сразу же после печати ENV.

Я пробовал chmod 777 для этого каталога, который, похоже, не помогает.

Я также пробовал:

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

и

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

Первые результаты в

Предупреждение: объект # не имеет метода 'slice' Use -force to продолжить.

позже все еще возникает ошибка ENOENT.

Любая помощь с тем, что эта ошибка ENOENT, вероятно, очень поможет; У меня не было большого успеха с Googling, а также с дочерними процессами API.

Ответ 1

Двойная проверка документов на child_process.spawn снова. Первым аргументом должна быть только команда для запуска, а вторая - аргументы:

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