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

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.xdnf.cn/news/911467.html

相关文章:

  • Linux缓冲区与glibc封装:入门指南
  • 智能生成完整 Java 后端架构,告别手动编写 ControllerServiceDao
  • 网络编程及原理(三)
  • 2025最新VMware17如何通过官网进行下载
  • [蓝桥杯]迷宫与陷阱
  • 端游如何反调试
  • 几何引擎对比:OpenCasCade、ACIS、Parasolid和CGM
  • 使用 FastMCP 构建你的第一个 MCP 服务:从零开始的 Python 示例
  • DAX权威指南8:DAX引擎与存储优化
  • 缓解骨质疏松 —— 补钙和补维 D
  • TeamCity Agent 配置完整教程(配合 Docker Compose 快速部署)
  • Steam 搬砖项目深度拆解:从抵触到真香的转型之路
  • 迈向群体智能-具身大小脑协作框架RoboOS及具身大脑RoboBrain
  • vim 替换 字符串 带 斜杠
  • 12-Oracle 23ai Vector 使用ONNX模型生成向量嵌入
  • RK3288项目(三)--linux内核之V4L2框架及ov9281驱动分析(上)
  • 手写muduo网络库(零):多线程中使用 weakptr 跨线程监听生命状态
  • 【android bluetooth 协议分析 02】【bluetooth hal 层详解 8】【高通蓝牙hal-进程被杀之前日志收集流程】
  • jmeter之导出接口
  • 立定跳远-二分
  • 20250606-C#知识:委托和事件
  • 企业引入数字孪生,优化决策,提升市场竞争力的秘诀
  • 缓存一致性的形式化定义
  • UVM环境打印如何显示时间单位
  • 仿射变换、根据特征点进行仿射变换
  • HarmonyOS运动开发:如何用mpchart绘制运动配速图表
  • 计算与分析2-深度学习
  • F5 – TCP 连接管理:会话、池级和节点级操作
  • 嵌入式Linux下如何启动和使用Docker
  • 【数据结构】图