都2026年了还不会Vite插件开发?手写一个版本管理插件,5分钟包会!
2026年了不会还有人觉得Vite插件开发很难吧今天就用一个实战案例让你彻底掌握它开篇为什么2026年你还需要学Vite插件说实话2026年的前端生态已经相当成熟各种轮子应有尽有。但正是这样的环境下能解决特定场景痛点的定制化插件才更能体现一个开发者的工程化能力。之前项目上遇到个老生常谈的问题线上出bug了是哪个代码版本测试环境明明修复了生产怎么还有问题构建时间是多少缓存要不要刷新手动查Git太low了。写个脚本不够优雅。于是我花10分钟写了个Vite插件发布到了 npm仓库搜索 vite-plugin-unified-version从此版本信息自动注入构建产物一劳永逸。今天就手把手带你写出来保证看完就会会了就能用一、Vite插件到底是啥3句话说明白本质就是一个普通的JavaScript对象灵魂对象里的各种钩子函数Hooks作用在Vite构建的不同阶段「搞事情」就像你在煮泡面时构建过程可以烧水前决定用什么锅config钩子煮面时加点调料transform钩子煮完了关火盛出来closeBundle钩子就这么简单二、实战5分钟开发一个版本管理插件Step 1搭个架子// vite-plugin-version.js export default function versionPlugin(options {}) { return { name: vite-plugin-version, // 插件名必须唯一 // 钩子函数往这里加 } }这就完事了对一个合法的Vite插件就这么简单Step 2获取版本信息我们要拿到Git commit ID和构建时间import { execSync } from child_process; export default function versionPlugin(options {}) { // 获取Git commit ID let commitId unknown; try { commitId execSync(git rev-parse --short HEAD).toString().trim(); } catch { console.log(⚠️ 不是Git仓库使用unknown版本); } // 记录构建时间 const buildTime new Date().toLocaleString(zh-CN); return { name: vite-plugin-version, // 钩子函数... } }知识点execSync可以执行系统命令但别忘了try-catch不是所有项目都用GitStep 3注入到HTML这是最核心的部分用transformIndexHtml 钩子transformIndexHtml(html) { // 要注入的内容 const injectContent !-- 版本信息-自动注入 -- meta nameapp_version content${commitId} / meta nameapp_build_time content${buildTime} / script window.app_version ${commitId}; window.app_build_time ${buildTime}; /script ; // 插入到/head前面 return html.replace(/head, injectContent \n/head); }核心技巧字符串替换是最简单可靠的注入方式不用怕出错Step 4添加编译时常量想在Vue/React组件里直接用用config钩子config() { return { define: { __APP_VERSION__: JSON.stringify(commitId), __BUILD_TIME__: JSON.stringify(buildTime) } }; }然后在组件里script setup console.log(当前版本, __APP_VERSION__) console.log(构建时间, __BUILD_TIME__) /scriptStep 5友好的控制台提示用closeBundle在构建完成后给点反馈closeBundle() { console.log( ✅ 版本注入成功 版本号${commitId} 构建时间${buildTime} 访问方式window.app_version 或 __APP_VERSION__ ); }三、完整代码拿去就能用把上面拼起来再加点配置选项import { execSync } from child_process; export default function versionPlugin(options {}) { // 可配置的键名 const VERSION_KEY options.versionKey || app_version; const TIME_KEY options.timeKey || app_build_time; const INJECT_META options.injectMeta ! false; // 获取版本信息 let commitId unknown; let buildTime new Date().toLocaleString(zh-CN); try { commitId execSync(git rev-parse --short HEAD).toString().trim(); } catch {} return { name: vite-plugin-version, // 注入编译时常量 config() { return { define: { [__${VERSION_KEY.toUpperCase()}__]: JSON.stringify(commitId), [__${TIME_KEY.toUpperCase()}__]: JSON.stringify(buildTime) } }; }, // 注入HTML transformIndexHtml(html) { let injectContent ; if (INJECT_META) { injectContent meta name${VERSION_KEY} content${commitId} / meta name${TIME_KEY} content${buildTime} /; } injectContent script window.${VERSION_KEY} ${commitId}; window.${TIME_KEY} ${buildTime}; /script; return html.replace(/head, injectContent \n/head); }, // 构建完成提示 closeBundle() { console.log(\n✅ [版本插件] 构建成功 v-${commitId}); } }; }四、如何使用// vite.config.js import versionPlugin from ./vite-plugin-version; export default { plugins: [ versionPlugin({ versionKey: my_app_version, // 自定义版本key injectMeta: true // 是否注入meta标签 }) ] }运行npm run build你的HTML就会自动带上版本信息head meta namemy_app_version contenta3b9c2d / meta nameapp_build_time content2026/3/15 14:30:22 / script window.my_app_version a3b9c2d; window.app_build_time 2026/3/15 14:30:22; /script /head五、还能怎么玩学会了基础你可以注入更多信息分支名、构建环境、打包时间生成版本文件用generateBundle钩子输出version.json版本对比开发环境提醒版本更新自动标签构建成功自动打Git tag// 扩展生成version.json generateBundle() { this.emitFile({ type: asset, fileName: version.json, source: JSON.stringify({ version: commitId, buildTime: buildTime, env: process.env.NODE_ENV }) }); }六、总结学Vite插件值不值值而且很值学习成本低一个对象几个钩子函数应用场景广任何自动化需求都能用插件解决提升工程化能力从「用工具」到「造工具」的跨越记住核心三要素name插件身份证钩子函数在正确的时间做正确的事配置选项让插件灵活

相关新闻

给金三银四裸考前端的人一个野路子

给金三银四裸考前端的人一个野路子

现在开始准备,完全来得及,但前提是——别再按部就班啃书刷题了。 金三银四已经到了,很多人还在犹豫:基础太差不敢投、项目太水没底气、算法还没刷够200道。但真相是,前端面试从来不是“谁复习得久”就能赢&#xff0c…

2026/5/17 8:21:35 阅读更多 →
Chandra OCR 实测

Chandra OCR 实测

我最近花时间将 Chandra OCR 集成到一个本地运行的文档处理流程中,该流程在 NVIDIA A10G GPU 上运行,用于扫描复杂表格和公式的手写实验报告。我发现了一些与众不同的东西:一个模型不仅输出文本,还输出结构化的 HTML,包…

2026/7/3 9:04:10 阅读更多 →
你的 IDE 正在成为配角

你的 IDE 正在成为配角

如果你最近在编码时感到有些……被取代了,恭喜你。你没有问题。是这个工作出了问题。 大约在 2025 年底,编码代理不再是周末尝鲜、周一默默卸载的新鲜事物。它们跨越了一个门槛——连贯性、耐力、“真正完成任务”——许多经验丰富的工程师注意到了同样…

2026/7/2 20:33:04 阅读更多 →

最新新闻

SARSteer: Safeguarding Large Audio Language Models via Safe-Ablated Refusal Steering

SARSteer: Safeguarding Large Audio Language Models via Safe-Ablated Refusal Steering

文章核心总结与翻译 一、主要内容 本文聚焦大型音频语言模型(LALMs)的安全对齐问题,针对现有LLM和LVLM安全防御方法直接迁移至LALMs时存在的两大缺陷(音频输入下基于LLM的引导失效、基于提示的防御导致良性查询过度拒绝),提出了首个推理时防御框架SARSteer(Safe-Ablat…

2026/7/5 15:16:31 阅读更多 →
Explainability of Large Language Models: Opportunities and Challenges toward Generating Trustwort...

Explainability of Large Language Models: Opportunities and Challenges toward Generating Trustwort...

文章核心总结与创新点 主要内容 文章聚焦大型语言模型(LLMs)的可解释性,围绕局部可解释性和机制可解释性两大核心方向展开。首先梳理了LLMs的发展背景与Transformer架构基础,系统综述了现有局部可解释性(如思维链推理、检索增强生成等)和机制可解释性(如注意力头分析、…

2026/7/5 15:16:31 阅读更多 →
深度解析Bottles:如何在Linux上轻松运行Windows游戏和软件

深度解析Bottles:如何在Linux上轻松运行Windows游戏和软件

深度解析Bottles:如何在Linux上轻松运行Windows游戏和软件 【免费下载链接】Bottles Run Windows software and games on Linux 项目地址: https://gitcode.com/gh_mirrors/bo/Bottles 你是否曾经因为某个心爱的Windows游戏或专业软件无法在Linux上运行而感到…

2026/7/5 15:14:30 阅读更多 →
高效技巧怎么用 AI 做表格,搭配 AI 导出鸭一站式搞定表格生成与导出工作

高效技巧怎么用 AI 做表格,搭配 AI 导出鸭一站式搞定表格生成与导出工作

引言 日常办公、数据整理场景里,手工制表、格式转换耗费大量时间,AI工具重塑表格制作流程,AI 导出鸭作为核心辅助工具,打通从生成到导出全流程,下文拆解完整实操体系。 一、项目核心痛点与市场需求 当下职场、学生、自…

2026/7/5 15:14:30 阅读更多 →
oyunfor土区礼品卡购买教程及踩坑记录

oyunfor土区礼品卡购买教程及踩坑记录

前置条件🔮我用的美丽国 chorme浏览器(edge没成功) 可安装翻译插件 招商银行万事达(研究生优选) 网络连接设置 属性里取消勾选ipv6协议(买好再改回来)1.注册账号需🔮 用的QQ邮箱,Gmail邮箱收不到验证码 其他信息正常填写,号码862.…

2026/7/5 15:10:30 阅读更多 →
教师资格证认定

教师资格证认定

前言 认定是获取教师资格证的第三个环节,也是最后一个环节。认定通过之后,即可取得教师资格证。 认定时间和认定条件 认定时间 每年的教师资格认定工作有上半年和下半年两个批次。不同于笔试和面试,教师资格证认定的时间并非全国统一。认定的…

2026/7/5 15:10:29 阅读更多 →

日新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

月新闻