NodeJS 如何监控STDOUT中有终止动画的child_process spawn会话?

iqjalb3h  于 2023-01-16  发布在  Node.js
关注(0)|答案(1)|浏览(138)

假设我想在node.js中运行npm install并记录STDOUT,我可以这样想:

var process = child_process.spawn("npm", ["install", package_name]);
process.stdout.on('data', function (chunk) {
  console.log(chunk.toString());
});

虽然这种执行在某些情况下有效,但在某些情况下会出错。它没有给我足够的信息,确切地说是什么导致了错误,所以我只能猜测。
我注意到的一件事是,现在很多npm install程序执行不以串行方式显示日志,而是内联显示动画等。
这里有一个例子来说明我所说的:

我的问题是:
1.这种动画可能是stdout.on('data')在某些情况下出错的原因吗?
1.我该如何处理这种情况?我只想获得所有数据的完整流

snvhrwxg

snvhrwxg1#

stdoutstderr。也许尝试捕捉那里的错误?下面是我使用npm安装程序的代码的一部分,但使用npm-cli.js的方式有点不同,它提供了在服务器上没有全局安装的情况下使用npm的选项:

// Require child_process module
const { fork } = require('child_process');
// Working directory for subprocess of installer
const cwd = './path-where-to-run-npm-command'; 
// CLI path FROM cwd path! Pay attention
// here - path should be FROM your cwd directory
// to your locally installed npm module
const cli = '../node_modules/npm/bin/npm-cli.js';
// NPM arguments to run with
// If your working directory already contains
// package.json file, then just install it!
const args = ['install']; // Or, i.e ['audit', 'fix']

// Run installer
const installer = fork(cli, args, {
  silent: true,
  cwd: cwd
});

// Monitor your installer STDOUT and STDERR
installer.stdout.on('data', (data) => {
  console.log(data);
});
installer.stderr.on('data', (data) => {
  console.log(data);
});

// Do something on installer exit
installer.on('exit', (code) => {
  console.log(`Installer process finished with code ${code}`);
});

相关问题