| import { readdir, stat } from 'fs'; | 
| import type { Plugin } from 'vite'; | 
|   | 
| import { sum } from 'lodash'; | 
|   | 
| import picocolors from 'picocolors'; | 
| const { green, blue, bold } = picocolors; | 
|   | 
| import dayjs, { Dayjs } from 'dayjs'; | 
| import duration from 'dayjs/plugin/duration.js'; | 
| import pkg from '../package.json'; | 
|   | 
| dayjs.extend(duration); | 
|   | 
| const staticPath = 'dist'; | 
| const fileListTotal: number[] = []; | 
|   | 
| const recursiveDirectory = (folder: string, callback: Function): void => { | 
|   readdir(folder, (err, files: string[]) => { | 
|     if (err) throw err; | 
|     let count = 0; | 
|     const checkEnd = () => { | 
|       ++count === files.length && callback(); | 
|     }; | 
|     files.forEach((item: string) => { | 
|       stat(folder + '/' + item, (err, stats) => { | 
|         if (err) throw err; | 
|         if (stats.isFile()) { | 
|           fileListTotal.push(stats.size); | 
|           checkEnd(); | 
|         } else if (stats.isDirectory()) { | 
|           recursiveDirectory(`${folder}/${item}/`, checkEnd); | 
|         } | 
|       }); | 
|     }); | 
|     files.length === 0 && callback(); | 
|   }); | 
| }; | 
|   | 
| const formatBytes = (a: number, b?: number): string => { | 
|   if (0 === a) return '0 Bytes'; | 
|   const c = 1024, | 
|     d = b || 2, | 
|     e = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'], | 
|     f = Math.floor(Math.log(a) / Math.log(c)); | 
|   return parseFloat((a / Math.pow(c, f)).toFixed(d)) + ' ' + e[f]; | 
| }; | 
|   | 
| export function viteBuildInfo(): Plugin { | 
|   let config: { command: string }; | 
|   let startTime: Dayjs; | 
|   let endTime: Dayjs; | 
|   | 
|   return { | 
|     name: 'vite:buildInfo', | 
|     configResolved(resolvedConfig: { command: string }) { | 
|       config = resolvedConfig; | 
|     }, | 
|     buildStart() { | 
|       if (config.command === 'build') { | 
|         startTime = dayjs(new Date()); | 
|       } | 
|     }, | 
|     closeBundle() { | 
|       if (config.command === 'build') { | 
|         console.log(bold(green(`👏欢迎使用${blue(pkg.name)}`))); | 
|         endTime = dayjs(new Date()); | 
|         recursiveDirectory(staticPath, () => { | 
|           console.log( | 
|             bold( | 
|               green( | 
|                 `恭喜打包完成🎉(总用时${dayjs | 
|                   .duration(endTime.diff(startTime)) | 
|                   .format('mm分ss秒')},打包后的大小为${formatBytes( | 
|                   sum(fileListTotal) | 
|                 )}); 请确认.env文件的 VITE_PROXY_DOMAIN_REAL和VITE_OSS_URL` | 
|               ) | 
|             ) | 
|           ); | 
|         }); | 
|       } | 
|     }, | 
|   }; | 
| } |