vite-plugin-build-version-file
这篇文档解决什么问题
这个库用来给 Vite 项目提供统一的前端版本信息,适合拿来做这些事情:
- 页面展示当前前端版本
- 检测线上是否有新版本并提示刷新
- 灰度发布时比对本地版本和服务端版本
当前知识库已经在站点配置里用了这个库,所以这不是外部资料,而是当前项目的真实依赖。
当前项目里的实际用法
当前站点在 .vitepress/config.mjs 里直接接入了这个插件:
js
import { defineConfig } from "vitepress";
import buildVersionPlugin from "vite-plugin-build-version-file";
export default defineConfig({
vite: {
plugins: [buildVersionPlugin()],
},
});这说明当前站点构建后会产出版本文件,也会在页面里注入版本信息。
安装和适用范围
包名是 vite-plugin-build-version-file。
bash
pnpm add vite-plugin-build-version-file也可以用:
bash
npm install vite-plugin-build-version-file适用范围:
- 仅支持
Vite - 适合
Vue 3项目 - 要求
vite >= 5 - 要求
node >= 18
最小接入方式
js
import { defineConfig } from "vite";
import vue from "@vitejs/plugin-vue";
import buildVersionPlugin from "vite-plugin-build-version-file";
export default defineConfig({
plugins: [vue(), buildVersionPlugin()],
});默认会发生什么
默认配置下,插件会做这几件事:
- 开发环境访问
/version.json时返回版本信息 - 构建完成后在输出目录生成
version.json - 在 HTML 中注入
window["__VERSION__"] - 开发环境默认版本号是
0 - 构建环境默认版本号是当前时间戳,格式是
YYYYMMDDHHmmss
构建后的版本文件通常是这样:
json
{
"version": "20260401153045",
"production": true
}开发环境默认返回:
json
{
"version": 0,
"production": false
}配置项
filename
- 类型:
string - 默认值:
"version.json" - 作用:控制输出文件名
如果写成 meta/version.json,构建后会输出到 dist/meta/version.json,开发环境访问路径也会同步变化。
globalName
- 类型:
string - 默认值:
"__VERSION__" - 作用:控制注入到
window上的属性名
默认注入效果:
html
<script>
window["__VERSION__"] = "20260401153045";
</script>injectToHtml
- 类型:
boolean - 默认值:
true - 作用:是否向 HTML 注入全局变量
设成 false 后,仍然会生成 version.json,只是不会注入 window["__VERSION__"]。
version
- 类型:
string | number | ((ctx) => string | number) - 默认值:开发环境是
0,构建环境是当前时间戳 - 作用:自定义版本号生成逻辑
当传入函数时,会收到:
js
{
command: "serve" | "build",
mode: string,
}常见用法
使用默认配置
js
import { defineConfig } from "vite";
import vue from "@vitejs/plugin-vue";
import buildVersionPlugin from "vite-plugin-build-version-file";
export default defineConfig({
plugins: [vue(), buildVersionPlugin()],
});自定义全局变量名
js
import { defineConfig } from "vite";
import vue from "@vitejs/plugin-vue";
import buildVersionPlugin from "vite-plugin-build-version-file";
export default defineConfig({
plugins: [
vue(),
buildVersionPlugin({
globalName: "__APP_VERSION__",
}),
],
});页面里读取:
js
const version = window["__APP_VERSION__"];只保留 version.json
js
import { defineConfig } from "vite";
import vue from "@vitejs/plugin-vue";
import buildVersionPlugin from "vite-plugin-build-version-file";
export default defineConfig({
plugins: [
vue(),
buildVersionPlugin({
injectToHtml: false,
}),
],
});自定义输出路径
js
import { defineConfig } from "vite";
import vue from "@vitejs/plugin-vue";
import buildVersionPlugin from "vite-plugin-build-version-file";
export default defineConfig({
plugins: [
vue(),
buildVersionPlugin({
filename: "meta/version.json",
}),
],
});自定义版本号逻辑
js
import { defineConfig } from "vite";
import vue from "@vitejs/plugin-vue";
import buildVersionPlugin from "vite-plugin-build-version-file";
export default defineConfig({
plugins: [
vue(),
buildVersionPlugin({
version: ({ command, mode }) => {
if (command === "serve") {
return 0;
}
return `${mode}-20260401153045`;
},
}),
],
});在项目里怎么读取版本
读取注入到页面里的全局变量
js
const version = window["__VERSION__"];读取 version.json
js
const response = await fetch("/version.json");
const payload = await response.json();
console.log(payload.version);
console.log(payload.production);这篇文档应该怎么用
- 想快速知道这个库是做什么的,从这里开始
- 想确认当前站点是否已经接入,看上面的实际用法
- 想改文件名、版本号规则或全局变量名,直接看配置项
TIP
如果后面要补“接入步骤”“上线检查”“版本提示刷新流程”,更适合另开一篇放到 playbooks,不要继续堆在这一页。