javascript - 从 Nodejs 获取子进程的进度输出

标签 javascript node.js npm npm-install child-process

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

enter image description here

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

+ <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="e6859483879283cb9483878592cb879696a6d4c8d7c8de" rel="noreferrer noopener nofollow">[email protected]</a>
added 63 packages from 20 contributors in 4.885s

更新时是这样的:

+ <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="731001161207165e01161210075e12030333415d425d4b" rel="noreferrer noopener nofollow">[email protected]</a>
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);
});

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

编辑:嗯,根据 Mark's answer我现在可以看到进度条,但是如何实时将此结果(进度条)输出到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'});

关于javascript - 从 Nodejs 获取子进程的进度输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55291049/

相关文章:

javascript - 不使用 JQuery 在数据库中存储图像

javascript - 正确使用比较运算符

javascript - 从用户上传的 svg 获取路径标记的最简单方法?

node.js - 在 OpenShift 上扩展 MongoDB 与使用 MongoLab

node.js - 尝试构建phonegap应用程序时出现错误

javascript - 如何在 amcharts 中的日期之间应用日期过滤器

javascript - 如何通过 socket.io 将图像发送到服务器?

twitter-bootstrap - NPM WARN : bootstrap@4. 0.0 需要 popper.js 的同级

javascript - 如何加载 Angular 应用程序中的所有依赖项

javascript - 使用 phantomjs\chrome 处理 Protractor 事件