Формат строки NodeJS spwn stdout

Я создаю процесс в node и отслеживаю вывод команды следующим образом:

proc.stdout.on("data", function (data) {
    console.log(data.toString());
});

Это хорошо работает, однако вывод, кажется, разбивает строки:

npm http
 304 https://registry.npmjs.org/underscore

Выше всего одна строка из ответа от npm install. Обычно это все в одной строке, это также добавляет разрывы строк до и после ответа. Есть ли способ получить вывод данных, похожий на стандартный запуск, т.е. По очереди?

Ответ 1

Потоки буферизуются и выделяют события data всякий раз, когда им захочется (так сказать), а не на строгие границы, такие как строки текста.

Но вы можете использовать модуль readline для разбора буферов в строках для вас:

var child_process = require('child_process');
var readline      = require('readline');
var proc          = child_process.spawn(...);

readline.createInterface({
  input     : proc.stdout,
  terminal  : false
}).on('line', function(line) {
  console.log(line);
});

Ответ 2

На ум приходят 3 решения:

// solution #1
process.stdout.write(data);

// solution #2
console.log(data.toString().replace(/[\n\r]/g, ""));

// solution #3
var child_process = require('child_process');
var readline = require('readline');
var proc = child_process.spawn(...);
readline.createInterface({
  input: proc.stdout,
  terminal: false
}).on('line', function(line) {
  console.log(line);
});