我正在玩从npm install -g create-react-app
脚本生成js
的游戏。我想实时获取输出的 部分,您可以在其中查看软件包安装过程的进度。我的意思是:
但是当我执行脚本时,安装时的输出是这样的:
+ 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);
});
因此,可以在实时进度条中获得期望的 输出?
编辑:好吧,根据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);
});
});
};
编辑重复项:我的问题与另一个问题不同,因为现在我正尝试使用从另一个问题中得到的答案(评论)来解决另一个问题!
答案 0 :(得分:1)
当输出通过管道定向时,NPM避免使用动画和进度条。假设这是顶级父进程,则可以指定一个选项,将所有STDIO选项定向到主机。
const command = spawn(cmd, args, {stdio: 'inherit'});