Npm 子进程实时提要
Npm child process live feed
我正在为 node.js 应用编写 CLI 工具。一些命令必须 运行 npm 并显示结果。这是我目前所拥有的:
import {spawn} from 'child_process';
let projectRoot = '...';
let npm = (process.platform === "win32" ? "npm.cmd" : "npm"),
childProcess = spawn(npm, ["install"], { cwd: projectRoot });
childProcess.stdout.pipe(process.stdout);
childProcess.stderr.pipe(process.stderr);
childProcess.on('close', (code) => {
// Continue the remaining operations
});
该命令 运行 正常并输出结果(或错误)。但是,它没有给我一个带有进度条等的实时提要。它一直等到整个操作结束,然后将输出转储到控制台。
我已经尝试了生成配置的不同变体,但我无法让它向我显示实时提要。
我在 Windows 10 并使用 node.js 4 和 npm 3。
如评论中所述:运行 spawn
和 { stdio: 'inherit' }
。
然而,很好的问题是为什么 'manual piping' 不这样做。我认为那是因为 npm
使用了 'fancy progress bar'。它可能使用一些特殊的方式来处理不能很好地与 process.stdout
兼容的标准输出。如果您尝试其他一些长 运行 命令(例如 'find ./'),您的管道方式工作正常。
我正在为 node.js 应用编写 CLI 工具。一些命令必须 运行 npm 并显示结果。这是我目前所拥有的:
import {spawn} from 'child_process';
let projectRoot = '...';
let npm = (process.platform === "win32" ? "npm.cmd" : "npm"),
childProcess = spawn(npm, ["install"], { cwd: projectRoot });
childProcess.stdout.pipe(process.stdout);
childProcess.stderr.pipe(process.stderr);
childProcess.on('close', (code) => {
// Continue the remaining operations
});
该命令 运行 正常并输出结果(或错误)。但是,它没有给我一个带有进度条等的实时提要。它一直等到整个操作结束,然后将输出转储到控制台。 我已经尝试了生成配置的不同变体,但我无法让它向我显示实时提要。
我在 Windows 10 并使用 node.js 4 和 npm 3。
如评论中所述:运行 spawn
和 { stdio: 'inherit' }
。
然而,很好的问题是为什么 'manual piping' 不这样做。我认为那是因为 npm
使用了 'fancy progress bar'。它可能使用一些特殊的方式来处理不能很好地与 process.stdout
兼容的标准输出。如果您尝试其他一些长 运行 命令(例如 'find ./'),您的管道方式工作正常。