vite学习笔记-自定义构建信息打印vite插件

Vite构建信息插件详解

这个自定义Vite插件用于在构建过程中显示友好的提示信息,包括欢迎消息和构建完成后的统计信息。下面我将详细解析这个插件的实现和工作原理。

插件功能概述

该插件主要有两个核心功能:

  1. 构建开始时:显示欢迎消息
  2. 构建完成后:显示构建时间和打包大小

插件实现解析

1. 导入依赖

import type { Plugin } from "vite";
import gradient from "gradient-string";
import { getPackageSize } from "./utils";
import dayjs, { type Dayjs } from "dayjs";
import duration from "dayjs/plugin/duration";
import boxen, { type Options as BoxenOptions } from "boxen";
dayjs.extend(duration);
  • vite:Vite插件类型
  • gradient-string:用于创建渐变色文本
  • getPackageSize:自定义工具函数,计算打包后文件夹大小
  • dayjs:轻量级日期处理库,扩展了duration插件用于时间差计算
  • boxen:在终端创建带边框的文本框

2. 欢迎消息配置

const welcomeMessage = gradient(["cyan", "magenta"]).multiline(
  `您好! 欢迎使用文泽运维监控平台\nWelcome to the WIZ Operations Monitoring Platform`
);

const boxenOptions: BoxenOptions = {
  padding: 0.5,
  borderColor: "cyan",
  borderStyle: "round"
};
  • 使用渐变色(cyan到magenta)创建多行欢迎消息
  • 配置文本框选项:内边距0.5、青色边框、圆角样式

3. 插件主体结构

export function viteBuildInfo(): Plugin {
  let config: { command: string };
  let startTime: Dayjs;
  let endTime: Dayjs;
  let outDir: string;
  
  return {
    name: "vite:buildInfo",
    // ...插件钩子函数
  };
}

插件使用闭包保存以下状态:

  • config:Vite配置信息
  • startTime/endTime:构建开始/结束时间
  • outDir:构建输出目录

4. 插件钩子详解

(1) configResolved 钩子
configResolved(resolvedConfig) {
  config = resolvedConfig;
  outDir = resolvedConfig.build?.outDir ?? "dist";
}
  • 在Vite配置解析完成后调用
  • 保存解析后的配置信息
  • 获取输出目录(默认为"dist")
(2) buildStart 钩子
buildStart() {
  console.log(boxen(welcomeMessage, boxenOptions));
  if (config.command === "build") {
    startTime = dayjs();
  }
}
  • 构建开始时调用
  • 打印带边框的欢迎消息
  • 如果是构建命令(非开发模式),记录开始时间
(3) closeBundle 钩子
closeBundle() {
  if (config.command === "build") {
    endTime = dayjs();
    return new Promise((resolve) => {
      getPackageSize({
        folder: outDir,
        callback: (size: string) => {
          const buildTime = dayjs
            .duration(endTime.diff(startTime))
            .format("mm分ss秒");
          
          const message = gradient(["cyan", "magenta"]).multiline(
            `🎉 恭喜打包完成(总用时${buildTime},打包后的大小为${size}`
          );
          
          console.log(boxen(message, boxenOptions));
          resolve();
        }
      });
    });
  }
}
  • 构建完成后调用
  • 记录结束时间
  • 返回Promise确保等待异步操作完成
  • 调用getPackageSize计算打包大小
  • 构建完成消息包含:
    • 构建时间(分钟和秒)
    • 打包后大小
    • 同样应用渐变色和边框样式
  • 调用resolve()标记异步操作完成

插件工作流程

Vite 构建过程构建信息插件终端输出configResolved(配置)保存配置和输出目录buildStart()显示欢迎消息记录开始时间closeBundle()记录结束时间计算打包大小(异步)显示构建信息通知完成(Promise resolve)Vite 构建过程构建信息插件终端输出

关键设计考虑

  1. 异步处理:通过返回Promise确保Vite等待打包大小计算完成
  2. 条件执行:只在build命令下记录时间和显示统计信息
  3. 用户体验
    • 使用渐变色提升视觉吸引力
    • 边框美化输出内容
    • 包含emoji表情增加趣味性
  4. 国际化:同时包含中英文欢迎语
  5. 时间格式:使用易读的"分秒"格式显示构建时间

使用场景

这个插件特别适合:

  • 企业级项目构建流程
  • 需要提升开发者体验的场景
  • 展示关键构建指标(时间、大小)
  • 添加品牌标识(如"文泽运维监控平台")

效果

在这里插入图片描述

总结

这个Vite插件通过优雅地利用Vite的插件钩子机制,在构建过程的关键节点添加了友好的提示信息。它不仅提升了开发体验,还提供了有价值的构建指标,帮助开发者快速了解构建结果。插件设计考虑了异步操作处理、条件执行和视觉优化,是一个实用且可扩展的Vite插件示例。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

前端程序员_花姐夫Jun

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值