当前位置: 首页 > article >正文

【VUE3】Vite编译的打包输出dist包大小的小工具

今天算是入职了一家外包吧吧,行情不好,先找个过渡。
中秋节第一天,先卷一下,我优化了下一个项目模版,因为我的项目需要我从那个模版上复制出一个新的项目,那本着不折腾就难受的心态,我还是进行了优化,优化完成后我就想我为什么不能在编译后显示下我打出来的dist包的大小呢,所以就有了下方的小函数
顺便说下黑悟空俺四天就通关了!!

// size-report-plugin.ts
import { Plugin } from 'vite'

export const sizeReportPlugin = (): Plugin => {
  return {
    name: 'size-report',
    apply: 'build', // 仅在构建时应用此插件
    async closeBundle() {
      const fs = await import('fs')
      const path = await import('path')
	// 这边一定要注意,我的文件夹叫dist,然后目录路径和各位的项目可能有出入,请修改为正确的路径
      const distPath = path.resolve(__dirname, '../../dist')
      let totalSize = 0

      // 递归计算文件大小
      const calculateSize = (dir: string) => {
        const files = fs.readdirSync(dir)
        for (const file of files) {
          const filePath = path.join(dir, file)
          const stat = fs.statSync(filePath)
          if (stat.isDirectory()) {
            calculateSize(filePath) // 如果是目录,则递归计算
          } else {
            totalSize += stat.size // 累加文件大小
          }
        }
      }

      calculateSize(distPath)

      // 转换为可读的格式(例如:KB,MB)
      const units = ['B', 'KB', 'MB', 'GB', 'TB']
      let unitIndex = 0
      while (totalSize >= 1024 && unitIndex < units.length - 1) {
        totalSize /= 1024
        unitIndex++
      }

      // 输出结果,亮色表示
      console.log(
        `\x1B[33m\x1B[4m打出来的包大小: ${totalSize.toFixed(2)}${units[unitIndex]}\x1B[0m`
      )
    }
  }
}

然后引用到vite.config.ts

// vite.config.ts
import { defineConfig } from 'vite';
import sizeReportPlugin from './size-report-plugin';

export default defineConfig({
  plugins: [sizeReportPlugin()],
});

确保在tsconfig.json中包含了必要的Node.js模块类型定义:

// tsconfig.json
{
  "compilerOptions": {
    // ... 其他选项
    "types": ["node"],
    "esModuleInterop": true
  }
}

记得在运行之前安装Node.js的类型定义,如果尚未安装,可以使用以下命令:

npm install --save-dev @types/node

http://www.kler.cn/news/310259.html

相关文章:

  • React-Hook原理
  • vue的插槽
  • 08 Shell Script条件判断
  • 传输层——UDP协议
  • CentOS 上配置多服务器 SSH 免密登录
  • 【oj刷题】二分查找篇:二分查找算法的原理和应用场景
  • 滤波器的分类
  • PM2.5粉尘传感器详解(STM32)
  • 记录一下ElementUI 3 在浏览器导入, table表格显示问题
  • 笔记:简介Drawing是什么,都有哪些,如何使用
  • 前后端联调
  • 如何建立一个Webservice WSDL的简单例子(完整例子)
  • 如何在微信小程序中实现WebSocket连接
  • JEE 设计模式
  • 黑神话悟空mac可以玩吗
  • 软考高级:嵌入式系统调度算法 AI 解读
  • OJ 组合总和
  • MySQL面试题--连续三天登录(困难)
  • Python基础(七)——PyEcharts数据分析(面向对象版)
  • fortran定义数组
  • [SAP ABAP] 修改内表数据
  • HDMI色块移动——FPGA学习笔记13
  • VulhubDC-4靶机详解
  • Linux系统性能调优技巧详解
  • 『功能项目』回调函数处理死亡【54】
  • docker基础学习
  • C++调用C# DLL之踩坑记录
  • Oracle 数据库安装和配置教程
  • 每日学习一个数据结构-红黑树
  • 电脑怎么录屏?四款录屏工具分享