所以我试图用节点生成
npm install
命令。该代码工作正常,但我注意到的一件奇怪的事情是,节点没有给我 ansi 颜色代码以及运行命令时看到的进度条。这就是我生成孩子并收集输出的方式:
const { spawn } = require('child_process'),
proc = spawn('npm', ['install']);
proc.stdout.setEncoding('utf8');
proc.stderr.setEncoding('utf8');
let stdout = '';
proc.stdout?.on('data', (buffer) => {
stdout += buffer;
});
let stderr = '';
proc.stderr?.on('data', (buffer) => {
stderr += buffer;
});
proc.on('close', (stat) => {
console.log(stdout, stderr)
if (stat === 0) return;
console.log(stat);
});
命令的进度条似乎没有被捕获,并且漏洞编号的颜色相同。
我最终使用了 node-pty 并且它工作得很好。如果您愿意,这是我的代码:
const pty = require('node-pty'),
proc = pty.spawn('npm', ['install'], {
name: 'xterm-color',
cols: 80,
rows: 30,
cwd: process.cwd(),
env: process.env
});
let out = '';
proc.onData((buffer) => out += buffer);
proc.onExit((e) => {
console.log(out, e);
});```
Node.js 还支持 FORCE_COLOR,这将强制子进程发送的内容包含 ANSI 颜色:https://www.pettermekhaeil.com/til/add-color-using-force-color