vue打包后如何自动更新版本控制

文章介绍了如何在Node.js中使用fs模块动态修改package.json中的版本号和构建时间,并在打包时自动执行,以实现版本信息的自动化管理。此外,还提到了将这些信息存储在vuex中供应用使用的方法。

一般项目迭代发布到线上,每次手动改版本号和版本时间有点麻烦,这边来试试打包后自动更新版本号

思路:

  1. node中通过fs模块可以对本地文件进行读写

  1. 打包时可以执行node文件

  1. 放置vuex变量中储存

实现:

  1. 全局创建文件buildTime.js ,引入fs模块,将调用方法的当前时间写入package.json文件中的lastBuildTime字段中,版本号也是可以按照具体的规则写方法。

let fs = require('fs')
const dayjs = require('dayjs')

const getPackageJson = () => {
  let data = fs.readFileSync('./package.json') //fs读取文件
  return JSON.parse(data) //转换为json对象
}
let packageData = getPackageJson()
const changeBuildTime = () => {
  packageData.lastBuildTime = dayjs().format('YYYY-MM-DD HH:mm:ss')
}
changeBuildTime()
fs.writeFile('./package.json', JSON.stringify(packageData, null, '\t'), err => {
  if (err) {
    console.log('写入失败', err)
  } else {
    console.log('构建时间写入成功 ' + packageData.lastBuildTime)
  }
})
  1. 将package.json文件中存一下版本号和发版时间变量

打包build时先跑node ./buildTime.js这个脚本,然后获取当前时间刷新变量

  1. 存入vuex中即可

import pkg from '../../../package.json'
const app = {
  state: {
    // 版本信息
    aboutInfo: {
      version: `V${pkg.version}`,
      publishTime: `${pkg.lastBuildTime}`
    },
}

后续我们打包的时候试一下:

ok没有问题,学过node或者python之类的的应该很轻松,可惜我并没有学习实操过node,记录一下

### 检测 Vue 项目打包部署后的代码版本更新 在 Vue 项目打包部署后,检测代码是否已更新主要依赖于缓存控制和版本标识机制。由于浏览器通常会缓存静态资源以提升性能,因此需要采取特定策略来确保用户获取到最新的代码。 #### 1. 利用文件哈希命名实现缓存失效 Vue CLI 默认在构建时为输出的 JavaScript 和 CSS 文件添加内容哈希值(如 `app.[hash].js`),这样当文件内容发生变化时,文件名也会随之改变,从而绕过浏览器缓存[^2]。该方法可以确保每次部署新版本时,浏览器都会重新下载新的资源。 ```javascript // vue.config.js 配置示例(默认已启用) module.exports = { filenameHashing: true, // 默认开启,无需额外配置 }; ``` #### 2. 设置 HTTP 缓存头控制 通过服务器配置设置合适的缓存策略,例如使用 `Cache-Control` 或 `ETag` 头信息,强制浏览器在每次访问时检查资源是否更新。Nginx 可以如下配置: ```nginx location ~ \.(js|css|png|jpg|woff)$ { add_header Cache-Control "no-cache, no-store, must-revalidate"; } ``` 此配置可确保浏览器不会缓存关键资源,从而始终加载最新版本[^3]。 #### 3. 在 HTML 中插入版本号或时间戳 可以在 `index.html` 的 `<head>` 中动态插入一个版本号或构建时间戳,作为查询参数附加到静态资源路径中。例如: ```html <script src="/app.js?v=1.0.0"></script> ``` 也可以通过构建脚本自动生成版本号并注入 HTML 文件中,从而确保每次部署都能触发资源重新加载。 #### 4. 使用 Service Worker 控制缓存更新(PWA 支持) 如果项目集成了 PWA 插件,则可以通过 Service Worker 管理本地缓存,并在新版本部署后自动更新缓存资源。Vue CLI 提供了对 Workbox 的集成支持,可在 `vue.config.js` 中启用: ```javascript const { defineConfig } = require('@vue/cli-service'); const WorkboxPlugin = require('workbox-webpack-plugin'); module.exports = defineConfig({ pwa: { workboxOptions: { exclude: [/\.map$/, /manifest\.json$/], }, }, }); ``` 启用后,Service Worker 会在后台拉取新资源并在下次页面加载时生效[^4]。 #### 5. 前端主动请求版本信息进行比对 可以在前端定期向服务器请求一个包含当前版本信息的 JSON 文件(如 `/version.json`),并与本地存储的版本进行比较,若发现不一致则提示用户刷新页面或自动跳转至新版本。 ```javascript fetch('/version.json') .then(res => res.json()) .then(data => { if (data.version !== CURRENT_VERSION) { console.log('检测到新版本,请刷新页面'); } }); ``` 该方式适用于需要精确控制更新行为的场景,尤其适合企业级应用或灰度发布流程。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值