Skip to content

buildProgress

在 Vite 构建过程中实时显示终端构建进度条,支持多种显示格式和自定义主题。

导入方式

typescript
// 子模块独立导入(推荐)
import { buildProgress } from '@meng-xi/vite-plugin/plugins/build-progress'
import type { BuildProgressOptions, ProgressFormat, ProgressTheme, BuildPhase } from '@meng-xi/vite-plugin/plugins/build-progress'

// barrel 导入
import { buildProgress } from '@meng-xi/vite-plugin'

快速开始

typescript
import { defineConfig } from 'vite'
import { buildProgress } from '@meng-xi/vite-plugin'

export default defineConfig({
	plugins: [buildProgress()]
})

配置选项

选项类型默认值说明
widthnumber30进度条宽度(字符数)
formatProgressFormat'bar'进度条显示格式
completeCharstring'█'已完成部分的填充字符
incompleteCharstring'░'未完成部分的填充字符
clearOnCompletebooleantrue构建完成后是否清除进度条
showModuleNamebooleantrue是否显示当前处理模块名称
themeProgressTheme-自定义颜色主题
enabledbooleantrue启用插件
verbosebooleantrue显示详细日志
errorStrategy'throw' | 'log' | 'ignore''throw'错误处理策略

显示格式

格式说明
bar完整进度条模式,显示旋转动画 + 阶段标签 + 进度条 + 百分比 + 模块名
spinner旋转动画模式,显示旋转动画 + 阶段标签 + 百分比
minimal精简模式,仅显示阶段标签 + 百分比

颜色主题

自定义进度条各部分的颜色渲染函数。

typescript
interface ProgressTheme {
	completeColor: (text: string) => string // 已完成部分颜色
	incompleteColor: (text: string) => string // 未完成部分颜色
	percentageColor: (text: string) => string // 百分比数字颜色
	phaseColor: (text: string) => string // 阶段标签颜色
	moduleColor: (text: string) => string // 模块名称颜色
}

每个属性是一个接受纯文本字符串并返回带 ANSI 转义码着色字符串的函数。未提供的属性将使用默认主题。

构建阶段

插件根据以下阶段计算总体进度:

阶段进度范围说明
config5%读取配置阶段
resolve10%解析模块依赖阶段
transform15%-85%转换模块阶段
bundle+10%打包阶段(仅生产)
write+5%写入文件阶段
done100%构建完成

示例

精简格式

typescript
buildProgress({
	format: 'minimal'
})
// 输出: 转换模块 45%

自定义进度条外观

typescript
buildProgress({
	width: 40,
	completeChar: '■',
	incompleteChar: '□',
	clearOnComplete: false
})
// 输出: ⠋ 转换模块 ■■■■■■■■■□□□□□□□□□□□□□□□□□□□□□□ 45%

自定义颜色主题

typescript
buildProgress({
	theme: {
		completeColor: t => `\x1b[32m${t}\x1b[39m`, // 绿色
		incompleteColor: t => `\x1b[90m${t}\x1b[39m`, // 灰色
		percentageColor: t => `\x1b[1m${t}\x1b[22m`, // 粗体
		phaseColor: t => `\x1b[36m${t}\x1b[39m`, // 青色
		moduleColor: t => `\x1b[90m${t}\x1b[39m` // 灰色
	}
})

禁用模块名显示

typescript
buildProgress({
	showModuleName: false
})

注意事项

  • 在非 TTY 终端环境下(如 CI/CD 流水线),自动降级为日志输出模式
  • Windows 终端使用 ASCII 字符动画,其他平台使用 Unicode Braille 字符动画
  • 插件通过 enabled 选项完全控制启用/禁用,禁用时零性能开销
  • 开发模式下在服务器就绪后自动完成进度显示,生产模式下在 closeBundle 时完成

Released under the MIT License.