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

VUE前端实现自动打包成压缩文件

VUE前端实现自动打包成压缩文件

  • 背景
  • 思路
  • 实现
    • 打包
    • 代码实现
  • 尾巴

背景

做前端开发的兄弟们都经历过每次开发完成之后发包需要进行打包,然后将打包文件压缩。每次打好包了都得手动压缩一遍,就有点繁琐。今天我们就使用一种命令行自动压缩的方法,让每次编译打包完成之后自动进行压缩,直接解放你的双手。

思路

1、首先我们使用vite进行编译和打包,这时候会在项目根目录下生成dist文件夹,这里面就是我们打完包后的内容。
2、利用node中提供的fs和path来对文件进行读写操作。
3、利用第三方库archiver对dist文件夹进行压缩,并生成压缩文件。
4、在打包指令中加入自定义的压缩逻辑指令。

实现

针对以上几个步骤,我们分别来进行实现

打包

如果你是使用vite构建的项目,在package.json中scripts便签下已经自动为你配置好了build:prod打包命令,只需要执行npm run build:prod就会执行打包动作。如下图:
在这里插入图片描述

代码实现

1、首先,你需要安装 archiver 包。

npm install archiver

2、我们需要些一个js文件来执行文件的读写和压缩等操作,新建compress-zip.js文件,逻辑实现如下,已做好注释。

//node内置模块用来读写文件
const fs = require('fs')
//node内置模块用来将多个路径片段拼接成一个完整的路径字符串
const path = require('path')
//第三方压缩库
const archiver = require('archiver')
//自定义压缩文件的名字
const packageName = 'dist'
//__dirname是node中一个特殊的全局变量,用于获取当前执行脚本所在目录的绝对路径‌
//这里../../和../../dist根据你compress-zip.js文件存放路径来决定我这里是根目录vite/plugins/下面
//这里root是项目根目录
const root = path.join(__dirname, '../../')
//这里zipFolder是需要压缩的目录
const zipFolder = path.join(__dirname, '../../dist')
//生成输出流
const output = fs.createWriteStream(path.join(root, `${packageName}.zip`))
//设置压缩等级
const archive = archiver('zip', {zlib: { level: 9 } // Sets the compression level.
})
// 监听文件完成
output.on('close', () => {console.log(archive.pointer() + ' total bytes')console.log('archiver has been finalized and the output file descriptor has closed.')
})
// 结束
output.on('end', function () {console.log('Data has been drained')
})
// 处理警告
archive.on('warning', function (err) {if (err.code === 'ENOENT') {// log warning} else {// throw errorthrow err}
})
// 处理错误
archive.on('error', function (err) {throw err
})
// 将输出流管道到归档对象
archive.pipe(output)
// 读取需要压缩的文件夹,就是我们打包后的根目录的dist文件目录
const fileJob = fs.readdirSync(zipFolder, { withFileTypes: true, encoding: 'utf-8' })
//遍历
fileJob.forEach(job => {if (job.isFile()) {//压缩文件const file = path.join(zipFolder, job.name)archive.append(fs.createReadStream(file), { name: job.name })} else if (job.isDirectory()) {//压缩文件夹const dir = path.join(zipFolder, `${job.name}/`)archive.directory(dir, job.name)}
})
// 完成归档
archive.finalize()

3、添加自定义压缩指令,我们在package.json的scripts中添加一个zip指令,这个指令就是执行我们前面写的compress-zip.js。

/*...*/
"zip": "node vite/plugins/compress-zip.js"
/*...*/

然后在build:prod指令里面增加 && npm run zip如下:

/*...*/
"build:prod": "vite build && npm run zip"
/*...*/

好了,到这里就基本完成了,执行如下命令

npm run build:prod

看到控制台输出如下日志,就打包完成了,可以直接在项目根目录下找到dist.zip。

archiver has been finalized and the output file descriptor has closed.

尾巴

有问题可以给我留言,希望能帮助到有需要的人。如果你喜欢我的文章欢迎给我点赞,谢谢!

http://www.lryc.cn/news/2404049.html

相关文章:

  • 2025政务服务便民热线创新发展会议顺利召开,张晨博士受邀分享
  • 【PDF PicKiller】PDF批量删除固定位置图片工具,默认解密,可去一般图、背景图、水印图!
  • SpringAI Alibaba实战文生图
  • GIC700组件
  • 几种简单的排序算法(C语言)
  • RTOS学习之重难点
  • 有没有 MariaDB 5.5.56 对应 MySQL CONNECTION_CONTROL 插件
  • setting up Activiti BPMN Workflow Engine with Spring Boot
  • 使用 C/C++ 和 OpenCV 提取图像的感兴趣区域 (ROI)
  • TripGenie:畅游济南旅行规划助手:个人工作纪实(二十二)
  • 如何用AI高效运营1000+Tiktok矩阵账号
  • 杭州瑞盟 MS35774/MS35774A 低噪声256细分微步进电机驱动,用于空调风门电机驱动,香薰电机驱动
  • 【论文解读】Toolformer: 语言模型自学使用工具
  • 408第一季 - 数据结构 - 线性表II
  • 网络通讯知识——通讯分层介绍,gRPC,RabbitMQ分层
  • Linux与Windows切换使用Obsidian,出现 unexplained changes 问题的解决
  • 基于VMD-LSTM融合方法的F10.7指数预报
  • 35 C 语言字符串转数值函数详解:strtof、strtod、strtold(含 errno 处理、ERANGE 错误)
  • 解决 idea提示`SQL dialect is not configured` 问题
  • springboot的test模块使用Autowired注入失败
  • 日志收集工具-Filebeat
  • 【PCIe总线】 -- PCI、PCIe相关实现
  • Vue3学习(4)- computed的使用
  • 手机上网可以固定ip地址吗?详细解析
  • 电脑同时连接内网和外网的方法,附外网连接局域网的操作设置
  • 如何在Unity中实现点击一个按钮跳转到哔哩哔哩
  • DHCP 动态主机配置协议(Dynamic host configuration protocol)逐层封装过程: DHCP --> UDP --> IP
  • PySide6 GUI 学习笔记——常用类及控件使用方法(单行文本控件QLineEdit)
  • 【数据结构】6. 时间与空间复杂度
  • Python 函数全攻略:函数进阶(生成器、闭包、内置函数、装饰器、推导式)