自定义Vite插件VersionPlugin实现版本号更新
本文最后更新于106 天前,其中的信息可能已经过时,如有错误请发送邮件到1986413837@qq.com

src/utils/versionPlugin.ts

import fs from 'fs';   // Node.js 自带的【文件系统】模块,用来读写文件
import path from 'path'; // Node.js 自带的【路径处理】模块,用来拼接路径

export const versionPlugin = (): Plugin => {
  return {
    name: 'generate-version-file', // 插件起个名,方便调试看

    // closeBundle 是 Vite 的一个生命周期钩子
    // 意思是:“当你把所有代码都打包完,准备收工的时候,执行我这个函数”
    closeBundle() {
      const date = new Date();
      // 生成版本信息:时间戳 + 可读时间
      const versionInfo = {
        version: date.getTime().toString(),
        buildTime: date.toLocaleString(),
      };

      // process.cwd() 是 Node 的命令:获取当前项目“根目录”在哪里
      // path.resolve 负责把“根目录”和“dist”拼在一起,生成绝对路径
      const distPath = path.resolve(process.cwd(), 'dist');
      // path.join 继续拼,生成最终文件路径:.../dist/version.json
      const filePath = path.join(distPath, 'version.json');

      // 检查 dist 目录是否存在(防止打包失败目录没生成的情况)
      if (fs.existsSync(distPath)) {
        // fs.writeFileSync:把内容写入文件
        // JSON.stringify(..., null, 2):把对象转成好看的 JSON 字符串(带缩进)
        fs.writeFileSync(filePath, JSON.stringify(versionInfo, null, 2));
        
        // 在控制台打印一行彩色的字,告诉你生成成功了
        console.log('\x1b[36m%s\x1b[0m', `\n✨ [VersionPlugin] Generated version.json in dist/`);
      }
    }
  };
};

设计并实现前端构建版本追踪机制:针对项目迭代快、线上缓存排查难的问题,开发自定义 Vite 插件。利用 Node.js 文件流在构建阶段(closeBundle 钩子)自动注入构建时间戳与版本哈希,将线上问题排查效率提升 50%,有效解决了用户端缓存导致的“伪 Bug”反馈。

怎么解释你为什么用 closeBundle

回答: “因为我的目的是生成一个version.json到输出目录(dist)里。 如果我在 buildStart 做,那时 dist 目录可能还不存在,或者会被 Vite 的清空操作给删掉。 只有在 closeBundle 阶段,Vite 已经把所有的 JS/CSS 资源都写入磁盘了,这时候我再去写我的版本文件,是最安全、最准确的时机,就像是快递封箱前的最后贴单操作。”

Life's a struggle, I'll conquer it.
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇