前端 http缓存设置后 前端打包上线后,浏览器缓存导致 第一次访问会访问的旧的代码版本

前端缓存  文章参考 : https://juejin.cn/post/7127194919235485733

解决方案: 前端 要在打包的时候配置好脚手架配置文件 ,打包出来的文件名要  跟上一次打包出来的文件名 不一样才行 。

比如,有一个css文件a1

第一次打包a1.css文件追加哈希值变成了 a1.aaaaa.css,我们给a1.aaaaa.css设置了强缓存1W年。

然后项目改动,我们又打包了一次。打包后生产新的哈希值,a1.aaaaa.css变成了a1.bbbbb.css文件。那么当我们第一次访问a1.bbbbb.css文件的时候是不会被缓存。因为1W年的缓存是给a1.aaaaa.css文件做的。关我a1.bbbbb.css文件什么事?这样我们也就能拿到最新的改动。

其他可以被webpack生成哈希值的文件同理。

 

 

/* eslint-disable no-undef */
const path = require('path');
const webpack = require('webpack');
const proxyBaseUrl = '';
const resolve = dir => path.join(__dirname, dir);
// eslint-disable-next-line no-undef
const publicPath = process.env.NODE_ENV === 'production' ? '/' : '/';
const timeStamp = new Date().getTime();

module.exports = {
  outputDir: 'dist',
  publicPath,
  productionSourceMap: false,
  assetsDir: 'assets',
  filenameHashing: false,
  css: {
    loaderOptions: {
      postcss: { plugins: [require('autoprefixer')] },
      sass: {
        additionalData: `@import "@/assets/css/global.scss";`,
      },
    },
    extract: {
      filename: `css/[name].${timeStamp}.css`,
      chunkFilename: `css/chunk.[id].${timeStamp}.css`,
    },
  },
  devServer: {
    open: true,
    port: 8082,
    hot: true,
    proxy: proxyBaseUrl,
  },

  chainWebpack: cf => {
    const mode = cf.get('mode');

    if (mode !== 'production') {
      cf.plugin('sourceMap').use(webpack.SourceMapDevToolPlugin, [{}]);
    }
    cf.optimization.runtimeChunk(true);
    cf.plugin('jsMd5').use(webpack.ProvidePlugin, [
      {
        _jsMd5: 'js-md5',
      },
    ]);

    // 别名 alias
    cf.resolve.alias.set('@', resolve('src')).set('vue$', 'vue/dist/vue.esm.js');
  },
  configureWebpack: {
    output: {
      filename: `js/js[name].${timeStamp}.js`,
      chunkFilename: `js/chunk.[id].${timeStamp}.js`,
    },
  },
};
posted @ 2022-09-20 11:26  小魏code  阅读(318)  评论(0编辑  收藏  举报