繁体   English   中英

从Node.js获取子生成的进程的进度输出

[英]Getting the progress output of a child spawned process from nodejs

我在玩从js脚本npm install -g create-react-app的游戏。 我想实时获取输出的一部分,您可以在其中查看软件包安装过程的进度。 我的意思是:

在此处输入图片说明

但是当我执行脚本时,安装时的输出是这样的:

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

因此,有可能获得所需的实时输出,您可以在其中看到进度条?

编辑:好吧,根据马克的回答,我现在可以看到进度栏 ,但是我如何实时将这个结果(进度栏) 输出stdout ,我的意思是一个变量?

这是新代码:

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

关于重复的编辑:我的问题与另一个问题不同,因为现在我正尝试使用从另一个问题获得的答案(评论)来解决另一个问题!

当通过管道引导输出时,NPM避免使用动画和进度条。 假设这是顶级父进程,则可以指定一个选项来将所有STDIO选项定向到主机。

const command = spawn(cmd, args, {stdio: 'inherit'});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM