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

Vite打包压缩插件vite-plugin-pack-orchestrator,自动搞定压缩、校验、自动哈希命名

Vite 构建压缩插件vite-plugin-pack-orchestrator 为什么又造一个轮子市面上已经有一些 Vite 打包插件比如vite-plugin-zip-pack、vite-plugin-compress等能用但总差那么点意思 — 大多只支持 ZIP功能也比较单一。实际项目里打包这个环节往往没那么简单多种压缩格式️ — ZIP 方便分享给同事TAR.GZ 部署到 Linux 服务器7Z 追求更高压缩比存档归档不同场景需要不同格式文件校验 — 打包后需要 MD5/SHA1 校验值来确认版本一致性尤其是发布给客户的场景灵活命名✏️ — 版本号、时间戳、哈希值文件名里能带的信息越多越好CI/CD 友好 — 流水线里每次构建产物都应该是唯一可追溯的压缩后自动带哈希改名省去人工处理的麻烦写脚本去改也麻烦一些现有插件基本没法同时满足这些所以写了vite-plugin-pack-orchestrator。⚡ 和其他插件有什么不同功能大多数打包插件本插件压缩格式仅 ZIPZIP / TAR / TAR.GZ / 7Z校验和无MD5 / SHA1 / SHA256文件名模板固定命名支持[name][version][timestamp][hash]占位符Hook 扩展无onBeforeBuild/onAfterBuild/onError等钩子文件过滤部分支持includeexcludeglob 模式7Z 支持需要系统安装 7z内置零依赖输出目录控制固定位置archiveOutDir自定义 安装npminstallvite-plugin-pack-orchestrator-D 快速上手最基本的用法两行配置搞定// vite.config.tsimport{defineConfig}fromvite;importorchestratorfromvite-plugin-pack-orchestrator;exportdefaultdefineConfig({plugins:[orchestrator({pack:{outDir:dist,// 要打包的目录默认就是 distformat:zip,// 压缩格式zip | tar | tar.gz | 7zfileName:myapp,// 压缩包文件名},}),],build:{outDir:dist},});执行vite build后会在项目根目录生成myapp.zip。⚙️ 配置项详解pack — 打包配置pack:{outDir:dist,// 要打包的源目录相对于项目根目录默认 distfileName:myapp,// 文件名支持占位符见下方说明format:zip,// 压缩格式zip | tar | tar.gz | 7zcompressionLevel:9,// 压缩级别 0-9默认 9最高压缩率archiveOutDir:./releases,// 压缩包输出目录不写默认项目根目录exclude:[**/*.map],// 排除的文件glob 匹配include:[**/*.js],// 只包含的文件可选不设置则包含全部}fileName 占位符文件名支持以下占位符打包时自动替换占位符说明示例值[name]package.json 中的 namemy-awesome-app[version]package.json 中的 version1.2.0[timestamp]当前时间戳1714012345678[hash]构建内容 MD5 哈希完整 32 位a1b2c3d4e5f6...[hash:8]MD5 哈希前 N 位自定义长度a1b2c3d4// 示例fileName 设为 release-[version]-[timestamp]// 输出release-1.2.0-1714012345678.zip// 示例fileName 设为 [name]-v[version]// 输出my-awesome-app-v1.2.0.zip// 示例fileName 设为 [name]-[hash]// 输出my-awesome-app-a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6.zip// 示例fileName 设为 [name]-[hash:8]// 输出my-awesome-app-a1b2c3d4.zip如果 fileName 不包含扩展名插件会根据 format 自动追加.zip、.tar.gz等后缀。 hooks — 钩子函数onBeforeBuild — 构建前执行在 Vite 开始打包之前执行适合做一些前置清理工作hooks:{onBeforeBuild:async(){// 构建前的一些处理},}onBundleGenerated — bundle 生成后执行Vite bundle 生成后、压缩包创建前执行可以拿到构建产物信息hooks:{onBundleGenerated:(bundle){console.log(生成的文件:,Object.keys(bundle));},}onAfterBuild — 压缩完成后执行核心这是本插件最强大的功能。压缩包创建完成后插件会自动计算 MD5 / SHA1 / SHA256 三种校验和然后传给onAfterBuild。你可以利用这些校验和来重命名压缩包。返回一个新路径和原路径不同插件会自动重命名文件hooks:{onAfterBuild:(path,format,checksums){// path — 当前压缩包的完整路径// format — 压缩格式zip | tar | tar.gz | 7z// checksums — 校验和对象{ md5: string, sha1: string, sha256: string }returnpath;// 返回原路径则不重命名},}实际案例// 案例 1在扩展名前插入 SHA1 短哈希最常用// myapp.zip → myapp-3a7b2c1d.ziponAfterBuild:(path,format,checksums)path.replace(/(\.(?:zip|tar\.gz|tar|7z))$/,-${checksums.sha1.slice(0,8)}$1);// 案例 2用 MD5 全量替换文件名// myapp.zip → a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6.ziponAfterBuild:(path,format,checksums)path.replace(/^.(?\.\w$)/,checksums.md5);// 案例 3追加格式和哈希到原始文件名// myapp.zip → myapp-zip-a1b2c3d4.ziponAfterBuild:(path,format,checksums)path.replace(/(\.\w)$/,-${format}-${checksums.sha256.slice(0,8)}$1);// 案例 4完全自定义文件名用 format 参数自动适配后缀// myapp.zip → release-a1b2c3d4e5f6.ziponAfterBuild:(path,format,checksums)release-${checksums.md5.slice(0,12)}.${format};// 案例 5不重命名只是拿校验和做点其他事比如写入文件onAfterBuild:async(path,format,checksums){fs.writeFileSync(checksums.json,JSON.stringify(checksums));// 不 return 或 return 原路径 不重命名}onError — 出错时执行打包失败时回调适合接入告警通知hooks:{onError:async(error){console.error(打包出错了,error.message);// 可以在这里接入钉钉/企业微信告警},} 为什么说压缩后自动改名对 CI/CD 很重要在持续集成/持续部署的流水线中每次构建的产物都需要是唯一可追溯的。如果压缩包文件名固定叫dist.zip你怎么知道这次构建和上次有什么区别回滚的时候该拿哪个版本本插件通过onAfterBuild钩子拿到校验和后可以自动在文件名中插入哈希值hooks:{onAfterBuild:(path,format,checksums)path.replace(/(\.zip)$/,-${checksums.sha1.slice(0,8)}$1);}构建后输出myapp-1.0.2-3a7b2c1d.zip myapp-1.0.2-7f9e4b2a.zip文件名本身就是指纹一眼就能区分不同构建部署脚本直接按文件名定位版本不需要额外维护版本映射表。回滚也简单 — 找到上一个哈希文件名部署即可。配合[version][timestamp]占位符追溯性更强。 完整示例把前面的配置合在一起就是一个完整的生产级配置// vite.config.tsimport{defineConfig}fromvite;importorchestratorfromvite-plugin-pack-orchestrator;exportdefaultdefineConfig({plugins:[orchestrator({pack:{outDir:dist,// 打包 dist 目录fileName:myapp-[version],// 文件名带版本号format:zip,// ZIP 格式archiveOutDir:./releases,// 输出到 releases 目录exclude:[**/*.map],// 排除 sourcemap},hooks:{// 压缩完成后自动加上 SHA1 哈希onAfterBuild:(path,format,checksums)path.replace(/(\.(?:zip|tar\.gz|tar|7z))$/,-${checksums.sha1.slice(0,8)}$1),// 出错时打印日志onError:(error)console.error(打包失败,error.message),},}),],build:{outDir:dist},});vite build一次搞定不需要额外的打包脚本。插件很轻量代码开源欢迎试用和提建议 npm: vite-plugin-pack-orchestratorGitee: vite-plugin-pack-orchestratorGitHub: wangkai000/vite-plugin-pack-orchestrator

相关文章:

Vite打包压缩插件vite-plugin-pack-orchestrator,自动搞定压缩、校验、自动哈希命名

📦 Vite 构建压缩插件:vite-plugin-pack-orchestrator 🤔 为什么又造一个轮子? 市面上已经有一些 Vite 打包插件,比如 vite-plugin-zip-pack、vite-plugin-compress 等,能用,但总差那么点意思…...

互联网大厂 Java 求职者面试:从 Spring Boot 到微服务的挑战

互联网大厂 Java 求职者面试:从 Spring Boot 到微服务的挑战 在互联网大厂的面试中,技术栈的广度和深度常常是决定求职者能否成功的关键因素。本文通过一位候选人燕双非的面试经历,展示了在面试过程中如何应对技术问题,以及面试官…...

医疗影像AI分割技术:VISTA-3D模型解析与应用实践

1. 医疗影像分割的现状与挑战 全球每年进行超过3亿次CT扫描,仅美国就占8500万次。放射科医生每天需要处理海量影像数据,传统的人工标注方式效率低下且容易出错。以肝脏肿瘤分割为例,经验丰富的放射科医生完成一例标注平均需要15-20分钟&#…...

DS4Windows终极指南:3步让PlayStation手柄在Windows电脑上完美运行

DS4Windows终极指南:3步让PlayStation手柄在Windows电脑上完美运行 【免费下载链接】DS4Windows Like those other ds4tools, but sexier 项目地址: https://gitcode.com/gh_mirrors/ds/DS4Windows 还在为PC游戏无法识别你的PlayStation手柄而烦恼吗&#xf…...

解锁NVIDIA Profile Inspector全球影响力:多语言本地化架构深度解析

解锁NVIDIA Profile Inspector全球影响力:多语言本地化架构深度解析 【免费下载链接】nvidiaProfileInspector 项目地址: https://gitcode.com/gh_mirrors/nv/nvidiaProfileInspector 掌握显卡配置工具国际化,让全球玩家享受专业级图形优化体验 …...

Cursor 变慢怎么办?2026排查指南

前言 如果你最近明显感觉 Cursor 变慢(AI 回复卡住、打字延迟、界面顿一下、启动变久),你不是个例。 2026 年 3-4 月,官方论坛、Reddit、X 上都有大量相似反馈。 这篇不讲玄学调参,只做一件事: 把最常见根因…...

Intv_ai_mk11 操作系统原理问答助手:深入解析进程、线程与内存管理

Intv_ai_mk11 操作系统原理问答助手:深入解析进程、线程与内存管理 1. 计算机教学的新助手 计算机专业的学生们常常面临一个共同挑战:操作系统原理这门课既抽象又复杂。从进程调度算法到内存管理机制,从死锁条件到分页策略,每个…...

为什么 Claude Code 没有一句废话?扒光它的底层提示词,我悟了!

往期热门文章: 1、面试官尬笑:你说半天就能读完一个开源项目源码,不就是用 AI 吗?我说:是用 DeepWiki,而且是 Codemap 模式! 2、Claude Code、Cursor 和 Codex,到底选哪个&#xff1…...

SOCD Cleaner:如何用开源工具解决游戏输入冲突,实现亚毫秒级响应

SOCD Cleaner:如何用开源工具解决游戏输入冲突,实现亚毫秒级响应 【免费下载链接】socd Key remapper for epic gamers 项目地址: https://gitcode.com/gh_mirrors/so/socd 你是否曾在激烈的格斗游戏中,因为同时按下左右方向键而无法精…...

2026前端人必须知道的6个MCP服务器,每一个都能省掉一个工具链

你现在用AI的方式,可能还停留在"粘贴问题 → 复制答案 → 手动执行"的循环里。而MCP出现之后,这个循环正在被彻底打破。前几天有个同事问我:"你最近工作流变化大吗?"我想了想说:变化不大&#xff…...

SOCD Cleaner终极指南:彻底解决键盘输入冲突,提升游戏操作精度

SOCD Cleaner终极指南:彻底解决键盘输入冲突,提升游戏操作精度 【免费下载链接】socd Key remapper for epic gamers 项目地址: https://gitcode.com/gh_mirrors/so/socd 你是否在玩格斗游戏时,因为同时按下W和S键导致角色动作卡顿&am…...

第三届“长城杯”网数智安全大赛(防护赛)总决赛即将开启

4月28日,由中央网络安全和信息化委员会办公室、教育部、国家市场监督管理总局、国家数据局指导,中国信息安全测评中心、中国电信集团有限公司、中国移动通信集团有限公司、中国联合网络通信集团有限公司、北京师范大学联合主办的第三届“长城杯”网数智安…...

Zotero重复文献清理终极指南:5分钟批量合并重复条目的完整教程

Zotero重复文献清理终极指南:5分钟批量合并重复条目的完整教程 【免费下载链接】ZoteroDuplicatesMerger A zotero plugin to automatically merge duplicate items 项目地址: https://gitcode.com/gh_mirrors/zo/ZoteroDuplicatesMerger 还在为Zotero文献库…...

Hitboxer终极指南:如何用智能按键映射解决游戏操作冲突问题

Hitboxer终极指南:如何用智能按键映射解决游戏操作冲突问题 【免费下载链接】socd Key remapper for epic gamers 项目地址: https://gitcode.com/gh_mirrors/so/socd 你是否曾在激烈的游戏对战中,明明想向左移动却向右走?或者同时按下…...

人类思想史上的一些思维模型整理

LLM 本质上是在做条件概率的接龙:根据你已经写下的每一个 token,去推断下一个最可能的分布。 你用的词、句式、段落节奏、甚至隐含的思维路径,都在不断收窄模型的“接下来该怎么说”的可能性空间。 所以,和 AI 对话时,…...

IPATool 实战指南:解锁App Store应用下载的3种创新用法

IPATool 实战指南:解锁App Store应用下载的3种创新用法 【免费下载链接】ipatool Command-line tool that allows searching and downloading app packages (known as ipa files) from the iOS App Store 项目地址: https://gitcode.com/GitHub_Trending/ip/ipato…...

如何一键备份你的QQ空间历史说说?GetQzonehistory终极指南

如何一键备份你的QQ空间历史说说?GetQzonehistory终极指南 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 在数字时代,我们的青春记忆大多散落在各种社交平台中&…...

医疗影像不平衡分类实战:乳腺X光微钙化检测

1. 乳腺X光微钙化检测的不平衡分类模型构建实战作为一名在医疗影像分析领域工作多年的数据科学家,我经常遇到像乳腺X光微钙化检测这样的极端不平衡分类问题。今天我将分享如何构建一个高性能的检测模型,这个项目基于经典的Woods Mammography数据集&#…...

Awesome LLM资源列表:从业者的高效学习与应用导航

1. 项目概述:一份为LLM从业者量身打造的“藏宝图” 如果你正在或即将踏入大语言模型这个领域,无论是想快速上手应用,还是想深入底层原理,你大概率都经历过这样的时刻:面对海量的论文、代码库、教程和工具,…...

CnOpenData 税收调查企业实用新型专利授权质量统计表

税收是支撑国家长期发展的根本基础。作为服务财税改革、加强财税管理的一项重要基础性工作,全国税收调查工作为税收政策制定提供了扎实的数据支撑;同时,它对于学者准确掌握税源情况、窥探经济发展形势起到重要作用。参与全国税收调查的企业分…...

用YOLOv5和LabelImg从零制作FPS游戏数据集(含自动划分脚本)

从零构建FPS游戏AI训练数据集:YOLOv5与LabelImg实战指南 1. 数据集构建基础认知 在计算机视觉项目中,数据质量往往比算法选择更能决定最终效果。对于FPS游戏场景的目标检测,我们需要捕捉的关键元素通常包括玩家角色、武器、装备等。与传统数据…...

解密baidupankey:如何用AI技术秒级获取百度网盘提取码

解密baidupankey:如何用AI技术秒级获取百度网盘提取码 【免费下载链接】baidupankey 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 在数字资源共享日益频繁的今天,百度网盘已成为国内用户最常用的云存储平台之一。然而,…...

遗传算法原理与Python实现详解

1. 遗传算法基础概念解析遗传算法(Genetic Algorithm)是一种模拟自然选择过程的优化算法,它通过模拟生物进化中的选择、交叉和变异机制来寻找最优解。这种算法特别适合解决复杂的非线性问题,在机器学习、工程优化和金融建模等领域都有广泛应用。我第一次…...

VibeVoice多角色对话生成实践:基于LSTM的语音风格控制

VibeVoice多角色对话生成实践:基于LSTM的语音风格控制 1. 引言 你有没有想过,输入一段对话脚本,AI就能生成四个不同角色的自然对话音频?不是那种机械的电子音,而是有呼吸感、有情感起伏、角色音色分明的高质量播客内…...

Hydra开源情报收集框架:自动化渗透测试侦察实战指南

1. 项目概述:一个面向安全研究的开源情报收集框架最近在整理自己的渗透测试工具箱时,又翻出了这个老朋友——Hydra。这可不是希腊神话里的九头蛇,而是一个在安全圈里,特别是渗透测试和红队评估领域,几乎无人不知、无人…...

深入解析自动化任务执行框架:从核心原理到生产实践

1. 项目概述:一个多功能的自动化任务执行框架最近在梳理手头的一些重复性工作流时,发现很多任务虽然逻辑简单,但步骤繁琐,涉及多个工具和平台的切换。比如,我需要定期从几个不同的数据源抓取信息,进行初步清…...

ZooBot:基于SQLite与多通道架构的本地AI多智能体协作平台实战

1. 项目概述:一个真正可用的多智能体协作平台 如果你和我一样,对AI智能体(AI Agent)的概念着迷,但又被市面上那些要么过于复杂、要么只是个“玩具”的项目劝退,那么ZooBot的出现,绝对值得你花上…...

LeetCode Prim 算法题解

LeetCode Prim 算法题解 题目描述 Prim 算法是一种用于构建最小生成树的贪心算法。与 Kruskal 算法不同,Prim 算法从一个顶点开始,逐步扩展最小生成树,每次选择连接当前生成树和剩余顶点的最小权值边。 示例: 对于以下加权图&…...

【收藏备用】2026年金三银四春招|AI岗位暴涨12倍,程序员/小白靠大模型逆袭指南

“金三银四”春招大战已全面打响,2026年职场招聘市场被AI技术彻底激活!AI相关岗位同比暴涨12倍,平均月薪突破6万,顶级岗位月薪直逼13.7万,这场席卷全行业的AI人才争夺战,早已进入白热化阶段。对于程序员、A…...

LeetCode Kruskal 算法题解

LeetCode Kruskal 算法题解 题目描述 Kruskal 算法是一种用于构建最小生成树的贪心算法。最小生成树是连通图中所有边的权值之和最小的生成树。 示例: 对于以下加权图:A --(2)-- B --(4)-- C| | |(1) (3) (1)| | …...