NodeJS Spawn не запускает аргументы

Я создаю систему, которая использует spawn для запуска команд, как указано в массиве, который считывается из файла. Все работает нормально, когда я использую тестовые команды (например, echo Something), однако, когда я устанавливаю команду npm install express -save, вы получаете stdout, если вводите npm без каких-либо аргументов.

Вот код, обрабатывающий команды:

var runProcess = function (process, buildDir, callback) {
  console.log('Running command: ' + process);
  var args = process.split(" ");
  var command = args[0];
  var proc;
  var stdout;
  var stderr;

  // Set arguments by shifting array
  args.shift();

  // Spawn the command
  if (args.length) {
    if (command === 'npm') {
      proc = spawn(command, [args, "--color", "always"], {
        cwd: buildDir
      });
    } else {
      proc = spawn(command, [args], {
        cwd: buildDir
      });
    }
  } else {
    proc = spawn(command, [], {
      cwd: buildDir
    });
  }
}

Если в какой-то момент я console.log проверяю, попадает ли он в нужное место, он отслеживает правильно, но вывод всегда представляет собой npm commands дамп с информацией об использовании, как будто он не читает аргументы.


person Fluidbyte    schedule 22.02.2014    source источник
comment
[аргументы, --color, всегда] - вы уверены, что он не просто включает массив в качестве одного из аргументов, а не объединяет их вместе?   -  person lauriys    schedule 22.02.2014
comment
да, у меня это было как одиночное [args] раньше, оно делает то же самое независимо от дополнительных флагов.   -  person Fluidbyte    schedule 22.02.2014


Ответы (1)


Вы смешиваете свои типы, как предлагает @maxorq. Вам нужен один массив, содержащий только строки. Вы вкладываете массивы. Попробуй это:

  proc = spawn(command, args.concat( "--color", "always"), {
    cwd: buildDir
  });
person Peter Lyons    schedule 22.02.2014
comment
Да, это сделало это. Это странно, потому что я взял это из почти идентичного скрипта, который отлично работал. - person Fluidbyte; 22.02.2014