Node.js 在节点中繁殖,在终端中不显示动画

Node.js 在节点中繁殖,在终端中不显示动画,node.js,Node.js,在终端中使用npm安装marantz avr时,您会在终端中看到一个“过程动画” 但是,当我通过以下方式执行npm安装时: let spawn = require('child_process').spawn; let npm = spawn('npm', ['install', 'marantz-avr', '--no-save']); npm.stdout.on('data', function (data) { process.stdout.write(data); });

在终端中使用
npm安装marantz avr
时,您会在终端中看到一个“过程动画”

但是,当我通过以下方式执行npm安装时:

let spawn = require('child_process').spawn;

let npm = spawn('npm', ['install', 'marantz-avr', '--no-save']);

npm.stdout.on('data', function (data) {
    process.stdout.write(data);
});

npm.stderr.on('data', function (data) {
    process.stdout.write(data);
});

不显示动画。中仅显示“普通文本”。有没有办法解决这个问题?

在选项中传递
{stdio:'inherit'}
似乎可以解决这个问题,尽管我很好奇为什么您的代码和/或管道到父stdout/stderr上不起作用

您还需要确保在父进程退出之前先退出子进程:

function onExit () {
  npm.kill('SIGINT');
}
process.on('SIGINT', onExit);
process.on('SIGTERM', onExit);
process.on('exit', onExit);

伟大的发现!现在ctrl+c不再终止进程。有什么想法吗?找到了:我应该使用:
{stdio:['inherit',inherit',inherit']}
而不是
stdio:['inherit',inherit',inherit']
,stdio:['inherit',inherit']只是
stdio:['inherit',inherit',inherit']的缩写。尽管在父进程退出之前,应该告诉子进程先退出。我更新了我的答案以显示这一点。
function onExit () {
  npm.kill('SIGINT');
}
process.on('SIGINT', onExit);
process.on('SIGTERM', onExit);
process.on('exit', onExit);