• webpack高级概念,webpack与浏览器的缓存,打包文件hash命名(系列九)


    缓存

    场景

    生产环境中,我们配置output,输出打包配置,代码分割配置,第三方的库会被打包到vendors文件

        optimization: {
            usedExports: true,
            splitChunks: {
          chunks: 'all',
          cacheGroups: {
              vendors: {
                  test: /[\/]node_modules[\/]/,
                  priority: -10,
                  name: 'vendors',
              }
          }
        }
        },
        output: {
            filename: '[name].js',
            chunkFilename: '[name].chunk.js',
          path: path.resolve(__dirname, '../dist')
    
        }

    index.js入口文件

    import $ from 'jquery';
    import _ from 'lodash';
    
    const dom = $('<div>');
    dom.html(_.join(['dell', 'lee'], '---'));
    $('body').append(dom);

    第一次打包,生成的打包文件,浏览器加载后,会被浏览器缓存的,当修改index.js时,第二次打包,浏览器会从缓存中读取文件(前提没有刷新页面,生产环境没有devServer配置,不会自动刷新页面),所以页面也没有更改。开发环境不需要(有devServer配置,自动刷新页面功能)

    目前为止,我们每次修改源代码,打包出去后的文件名都不变。是有缓存的。所以当你文件名不变的话,更新内容打包上线。有缓存的电脑就无法获取到最新的代码。

    这个时候我们就会用到 contenthash

    接下来我们来配置下 contenthash (就是根据你文件内容生成的hash值),解决生产环境浏览器缓存问题

    // webpack.prod.js 生产环境
        output: {
            // 根据内容变化的生成hash值的命名
            filename: '[name].[contenthash].js',
            chunkFilename: '[name].[contenthash].js',
          path: path.resolve(__dirname, '../dist')
    
        }
     

    打包完之后会在 main 后面接上 hash 值。

    当我们修改index.js源码后,发现mian.js哈希值会发生变化,此时浏览器会从最新的打包mian.js文件中加载,因为第三库源码没有更改,所以vendors.js的哈希值没有变,浏览器会从缓存中加载第三库的打包文件

    当你不更新内容重新打包后, contenthash 还会维持不变。所以线上用户访问的时候就不会去 服务器 重新拿取代码,而是从缓存中取文件。

  • 相关阅读:
    css控制英文内容自动换行問題
    jquery添加select option两种代码思路比较
    C++实现单例模式
    C++实现单例模式
    windows下socket编程:区分shutdown()及closesocket()
    windows下socket编程:区分shutdown()及closesocket()
    socket关闭
    socket关闭
    C++模板的一些巧妙功能
    C++模板的一些巧妙功能
  • 原文地址:https://www.cnblogs.com/fsg6/p/14492311.html
Copyright © 2020-2023  润新知