Получение результатов выполнения процесса, порожденного дочерним процессом, из nodejs - PullRequest
0 голосов
/ 22 марта 2019

Я играю в порождении npm install -g create-react-app из js скрипта. Я хочу получить в режиме реального времени часть вывода, где вы можете видеть ход процесса установки пакета. Я имею в виду это:

enter image description here

Но когда я выполняю сценарий, при установке выдается следующее:

+ create-react-app@2.1.8
added 63 packages from 20 contributors in 4.885s

и это при обновлении:

+ create-react-app@2.1.8
updated 1 package in 1.971s

Код, который я использую:

const run = (cmd, args) => {
    return new Promise((resolve, reject) => {
        const spawn = require('child_process').spawn;
        const command = spawn(cmd, args);
        let result = '';
        command.stdout.on('data', data => {
            result += data.toString()
        });
        command.on('close', _ => {
            resolve(result)
        });
        command.on('error', err => {
            reject(err)
        });
    })
}

run(npmExecutable, ["install", "-g", "create-react-app"]).then(result => {
    console.log(result);
});

Итак, можно получить вывод реального времени , где можно увидеть индикатор выполнения?

РЕДАКТИРОВАТЬ: Ну, в соответствии с Ответ Марка Теперь я вижу бар прогесов , но как я могу вывести этот результат (индикатор выполнения) в реальном время стандартный вывод , я имею в виду переменную?

Это новый код:

const run = (cmd, args) => {
    return new Promise((resolve, reject) => {
        const spawn = require("child_process").spawn;
        const command = spawn(cmd, args, {
            stdio: "inherit"
        });
        command.on("close", _ => {
            resolve();
        });
        command.on("error", err => {
            reject(err);
        });
    });
};

РЕДАКТИРОВАТЬ О ДУБЛИКАТЕ: Мой вопрос отличается от другого, потому что сейчас я пытаюсь решить другую проблему, используя ответ (комментарии), полученный от другого вопроса!

1 Ответ

1 голос
/ 22 марта 2019

NPM избегает анимации и индикатора выполнения, когда вывод направляется через трубу. Предполагая, что это родительский процесс верхнего уровня, вы можете указать опцию для направления всех опций STDIO на хост.

const command = spawn(cmd, args, {stdio: 'inherit'});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...