簡體   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