
在 Node.js 开发中,命令行工具是非常常见的应用场景。当执行一些耗时的操作时,用户往往希望能看到操作的进度,这样可以增强用户体验,让用户了解操作的执行情况。本文将介绍如何在 Node.js 中显示操作进度提示,包括简单的文本提示和进度条的实现。
简单文本进度提示就是在命令行中定期输出当前操作的进度信息。可以通过 console.log 或者 process.stdout.write 来实现。
// 模拟一个耗时操作function simulateLongTask() {const totalSteps = 10;for (let i = 0; i < totalSteps; i++) {// 模拟耗时操作for (let j = 0; j < 100000000; j++) {}// 计算进度百分比const progress = ((i + 1) / totalSteps) * 100;console.log(`当前进度: ${progress}%`);}}simulateLongTask();
for 循环模拟一个耗时操作。console.log 输出当前进度信息。每次输出都会换行,会在命令行中产生大量的输出,不够美观。
process.stdout.write 实现不换行的进度提示process.stdout.write 可以在不换行的情况下输出内容,通过覆盖之前的输出实现动态更新进度信息。
// 模拟一个耗时操作function simulateLongTask() {const totalSteps = 10;for (let i = 0; i < totalSteps; i++) {// 模拟耗时操作for (let j = 0; j < 100000000; j++) {}// 计算进度百分比const progress = ((i + 1) / totalSteps) * 100;// 使用 \r 回到行首,覆盖之前的输出process.stdout.write(`\r当前进度: ${progress}%`);}// 最后换行process.stdout.write('\n');}simulateLongTask();
\r 回到行首:\r 是回车符,它可以将光标移动到当前行的开头,从而覆盖之前的输出。process.stdout.write('\n') 换行,避免后续输出覆盖进度信息。cli-progress 库实现进度条cli-progress 是一个功能强大的 Node.js 库,用于在命令行中创建进度条。它提供了多种类型的进度条,如单进度条、多进度条等。
npm install cli-progress
const cliProgress = require('cli-progress');const colors = require('ansi-colors');// 创建一个单进度条实例const bar = new cliProgress.SingleBar({format: '进度 |' + colors.cyan('{bar}') + '| {percentage}% || {value}/{total} 步',barCompleteChar: '\u2588',barIncompleteChar: '\u2591',hideCursor: true});// 总步骤数const totalSteps = 10;// 启动进度条bar.start(totalSteps, 0);// 模拟一个耗时操作function simulateLongTask() {for (let i = 0; i < totalSteps; i++) {// 模拟耗时操作for (let j = 0; j < 100000000; j++) {}// 更新进度条bar.update(i + 1);}// 停止进度条bar.stop();}simulateLongTask();
cliProgress.SingleBar 创建一个单进度条实例,并配置进度条的格式、完成字符、未完成字符等。bar.start(totalSteps, 0) 启动进度条,指定总步骤数和初始值。bar.update(i + 1) 更新进度条。bar.stop() 停止进度条。| 方法 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| 简单文本进度提示 | 实现简单 | 输出不美观,会产生大量换行 | 对进度显示要求不高的场景 |
process.stdout.write |
不换行,动态更新进度信息 | 功能简单,只能显示百分比 | 简单的进度显示场景 |
cli-progress 库 |
功能强大,支持多种类型的进度条,可定制性高 | 需要安装额外的库 | 对进度条显示要求较高的场景 |
通过以上方法,我们可以在 Node.js 命令行工具中方便地显示操作进度提示,提升用户体验。