import type { Plugin } from "vite"; import { getPackageSize } from "./utils"; import dayjs, { type Dayjs } from "dayjs"; import duration from "dayjs/plugin/duration"; import gradientString from "gradient-string"; import boxen, { type Options as BoxenOptions } from "boxen"; dayjs.extend(duration); const welcomeMessage = (VITE_PORT: number) => { return gradientString("cyan", "magenta").multiline( `您好! 欢迎使用 bunny 系列开发模板 项目访问地址如下: http://localhost:${VITE_PORT}` ); }; const boxenOptions: BoxenOptions = { padding: 0.5, borderColor: "cyan", borderStyle: "round" }; export function viteBuildInfo(VITE_PORT: number): Plugin { let config: { command: string }; let startTime: Dayjs; let endTime: Dayjs; let outDir: string; return { name: "vite:buildInfo", configResolved(resolvedConfig) { config = resolvedConfig; outDir = resolvedConfig.build?.outDir ?? "dist"; }, buildStart() { console.log(boxen(welcomeMessage(VITE_PORT), boxenOptions)); if (config.command === "build") { startTime = dayjs(new Date()); } }, closeBundle() { if (config.command === "build") { endTime = dayjs(new Date()); getPackageSize({ folder: outDir, callback: (size: string) => { console.log( boxen( gradientString("cyan", "magenta").multiline( `🎉 恭喜打包完成(总用时${dayjs .duration(endTime.diff(startTime)) .format("mm分ss秒")},打包后的大小为${size})` ), boxenOptions ) ); } }); } } }; }