vue2 打包时增加时间戳防止浏览器缓存,打包后文件进行 js、css 压缩


前言

vue 开发过程中,项目前端代码需要更新,更新后由于浏览器缓存导致代码没有及时更新所产生错误,所以在打包时增加时间戳防止浏览器缓存。还有另一个好处是增加时间戳可以看到是什么时间打包的代码,防止运维偷懒 没更新甩锅。


一、什么是浏览器缓存

浏览器缓存 是指浏览器将网站资源(如图片、CSS、JS等文件)保存在本地,以便在用户再次访问同一网站时可以更快地加载页面。浏览器缓存可以分为强缓存和协商缓存两种类型。强缓存是浏览器直接从本地缓存中读取资源,而不向服务器发送请求,从而加快页面加载速度。协商缓存则是在强缓存失效时浏览器向服务器发起请求,服务器会验证资源的最新状态,并返回给浏览器是否可以使用缓存的响应。

二、展示效果

打开 F12 进入 Sources 打开项目中的 static 文件中的 css 或者 js 就可以看到 每个文件后面都有一个时间戳 如: app.20240912143942.js 就是 2024年9月12日 打包的代码。
在这里插入图片描述

三、vue.config.js 代码

  1. 压缩打包文件;
  2. js 文件和 css 文件增加时间戳;

const CompressionPlugin = require("compression-webpack-plugin");
const version = dateFormat(new Date(),"yyyyMMddHHmmss");

// 本地服务接口地址
let target = "http://192.168.1.249", // 代理服务
module.exports = {
   
   
  //开发模式反向代理配置,生产模式请使用Nginx部署并配置反向代理
  devServer: {
   
   
    port: 2890,
    proxy: {
   
   
      "/api": {
   
   
        target,
        // 远程演示服务地址,可用于直接启动项目
        ws: true, // 代理 websockets,配置这个参数
        pathRewrite: {
   
   
          "^/api": "",
        },
      },
      "/blade-wwnetservice": {
   
    // 第三方接口调用接口
        target: "http://192.168.1.249:1888"
      },
    },
  },
  //路径前缀
  publicPath: "./",
  outputDir: "dist",
  assetsDir: "static",
  lintOnSave: false, // 是否开启eslint保存检测
  productionSourceMap: false, // 不会生成.map文件减小体积
  transpileDependencies: [
    "axios",
    
以下是几种让 Vue2 项目打包部署后浏览器自动更新缓存的方法: #### 1. Webpack 文件名哈希 + 强制刷新 在 `vue.config.js` 中开启文件名哈希,确保资源更新文件名改变,浏览器会认为是新资源从而重新载: ```javascript module.exports = { filenameHashing: true, // 开启文件名哈希 (默认已开启) configureWebpack: { output: { filename: `[name].[hash].js`, chunkFilename: `[name].[hash].js` } } } ``` 同,可在入口文件中添自动刷新逻辑,以确保新资源载 [^2]。 #### 2. 根据 `package.json` 版本号判断 更新 `package.json` 中的 `version` 值,每次打包递增。在 `main.js` 中,根据 `version` 判断是否进行缓存清理: ```javascript const VUE_APP_VERSION = require('../package.json').version; const vers = window.localStorage.getItem('appVersion'); if (VUE_APP_VERSION != vers) { localStorage.clear(); window.localStorage.setItem('appVersion', VUE_APP_VERSION); location.reload(); } ``` 这样,当版本号不一致,会清除本地存储并重新载页面 [^3]。 #### 3. 添时间戳 在 `vue.config.js` 配置中,为 cssjs 打包文件版本号时间戳,每次打包后,版本号都会改变: ```javascript const timestamp = new Date().getTime(); module.exports = { css: { // 输出重构 打包编译后的css文件名称,添时间戳 // 注意这个地址路径根据实际项目文件存放路径来填写,一般打包后都是在static文件夹下,如果不确定,先打包没有修改过的目录结构看一下。 extract: { filename: `static/css/[name].css?v=${timestamp}`, chunkFilename: `static/css/[name].css?v=${timestamp}`, } }, configureWebpack: { output: { filename: `static/js/[name].js?v=${timestamp}`, chunkFilename: `static/js/[name].js?v=${timestamp}`, } } } ``` 通过这种方式,每次打包后的资源文件名不同,浏览器会重新载 [^4]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值