webpack通过hash控制文件缓存

常用hash的种类

  1. hash 每次编译都会改变

      output: {
            filename: '[name].[hash:8].js',
        },
    
  2. chunkhash chunk文件的hash变动

      output: {
            path: path.resolve(__dirname, '../dist'),
            filename: '[name].[chunkhash].js',
        },
    
  3. contenthash 使css的hash不会随着entry改变需配合插件mini-css-extract-plugin使用

      plugins: [
    		 new MiniCssExtractPlugin({
    	      filename: '[name].[contenthash:8].css'
    		})
    	]
    

兼容处理

使用chunkhash来output后,使用dll插件的时候, vendor.js文件的hash值每次打包都会发生变化

为什么发生变化呢

  1. chunkhash依赖于runtime
  2. webpack runtime由于entry对应的Id变化而发生了变化

如何解决这个问题呢

HashedModuleIdsPlugin
new webpack.optimize.CommonsChunkPlugin({  names: ['vendor', 'manifest'], minChunks: Infinity})
new webpack.HashedModuleIdsPlugin()

使用插件 HashedModuleIdsPlugin

NamedModulesPlugin

这个插件是根据chunk在项目的相对路径命名模块id,只要vendor中的模块在根目录下的路径不变,但是路径字符会导致文件大小剧增

plugins: [ 
	new webpack.NamedModulesPlugin(), 
	new webpack.optimize.CommonsChunkPlugin({  name: 'vendor',  minChunks: Infinity })
]

参考文章:
https://sebastianblade.com/using-webpack-to-achieve-long-term-cache/#hash
https://juejin.im/entry/59b0dde46fb9a024844959a1/detail
https://www.cnblogs.com/tugenhua0707/p/9615822.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值