1.5.0 • Published 11 months ago

@feng-j/console-progress v1.5.0

Weekly downloads
-
License
ISC
Repository
github
Last release
11 months ago

console-progress

last update last commit

可以在 NodeJS 程序中展示进度条,用于任务处理进度的可视化反馈。

活动

Alt

SingleLine

constructor

构造函数(均为可选参数):

  • name(string):任务标题
  • leftChar(string):进度条左侧已完成部分字符
  • rightChar(string):进度条右侧未完成部分字符
  • leftColor:已完成部分进度条颜色(HEX颜色)
  • rightColor:未完成部分进度条颜色(HEX颜色)
  • showPercent(boolean):是否显示百分比
  • showTask(boolean):是否显示任务处理数量
  • hideCursor(boolean):隐藏终端光标
  • format(string):进度条格式,会按照字符串模板进行解析,例如{name} | {bar} | {percent}% Percent | {finish}/{total} Chunks,内置的变量有
    • bar:进度条
    • name:任务标题
    • percent:百分比
    • finish:已处理任务数量
    • total:总任务数量

start

开始任务,用于设置总任务数量,(allTask: number, finish: number = 0, formatData?: Record<string, string | number>)

update

更新任务进度,(finish: number, formatData?: Record<string, string | number>)

increment

按照step推进任务进度,(step: number = 1, formatData?: Record<string, string | number>)

const singleLine = new SingleLine({
  name: 'Test',
  leftColor: '#39c5bb',
  format: `${chalk.red('{name}')} | {bar} | ${chalk.yellow('{percent}% Percent')} | ${chalk.green('{finish}/{total} Chunks')}`
})
singleLine.start(100, 0)

setTimeout(() => {
  singleLine.update(30)

  const timer = setInterval(() => {
    singleLine.increment()
    if (singleLine.isFinished()) {
      clearInterval(timer)
    }
  }, 100)
}, 1000)

使用效果 result

文本内容没有自定义颜色配置,如果需要自定义颜色,可以通过format模板配合chalk自行控制,例如

{
  format: `${chalk.red('{name}')} | {bar} | ${chalk.yellow('{percent}% Percent')} | ${chalk.green('{finish}/{total} Chunks')}`
}

MultiLine

同SingleLine构造函数所需参数,会在创建line的时候作为默认参数,也可以创建line的时候手动指定

MultiLine.create,用于创建一行子line(total: number, finish: number = 0, option?: ConstructorParameters<SingleLine>, formatData?: Record<string, string | number>), 后续可以调用子line的update(finish: number, formatData?: Record<string, string | number>)方法更新, 或者是用multiLine的update(index: number, finish: number, formatData?: Record<string, string | number>)进行更新

const multiLine = new MultiLine()
const line1 = multiLine.create(100, 0, { name: 'line1' })
const line2 = multiLine.create(100, 0, { name: 'line2' })

const timer = setInterval(() => {
  const index = Math.floor(Math.random() * 2)
  const line = index === 0 ? line1 : line2
  if (line.isFinished()) {
    return
  }

  line.increment(5)

  if (line1.isFinished() && line2.isFinished()) {
    clearInterval(timer)
  }
}, 50)
1.5.0

11 months ago

1.3.0

11 months ago

1.2.0

11 months ago

1.1.1

11 months ago

1.1.0

11 months ago

1.0.1

11 months ago

1.0.0

11 months ago

0.0.1

11 months ago