| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- import boxen from 'boxen';
- import dayjs from 'dayjs';
- import duration from 'dayjs/plugin/duration';
- import gradient from 'gradient-string';
- import { getPackageSize } from './utils';
- import type { Options as BoxenOptions } from 'boxen';
- import type { Dayjs } from 'dayjs';
- import type { Plugin } from 'vite';
- dayjs.extend(duration);
- const welcomeMessage = gradient(['cyan', 'magenta']).multiline(`正在打包...`);
- const boxenOptions: BoxenOptions = {
- padding: 0.5,
- borderColor: 'cyan',
- borderStyle: 'round',
- };
- export function viteBuildInfo(): 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() {
- if (config.command === 'build') {
- console.log('\n' + boxen(welcomeMessage, boxenOptions));
- startTime = dayjs(new Date());
- }
- },
- closeBundle() {
- if (config.command === 'build') {
- endTime = dayjs(new Date());
- getPackageSize({
- folder: outDir,
- callback: (size: string | number) => {
- console.log(
- '\n' +
- boxen(
- gradient(['cyan', 'magenta']).multiline(
- `🎉 恭喜打包完成\n` +
- `总用时:${dayjs.duration(endTime.diff(startTime)).format('mm分ss秒')}\n` +
- `打包后的大小为:${size}`
- ),
- boxenOptions
- )
- );
- },
- });
- }
- },
- };
- }
|