webpack4×缓存,cacheGroups,runtimeChunk

博客介绍了Webpack相关内容,涉及runtimeChunk并给出相关转载介绍链接,还提到splitChunks.cacheGroups可用于抽离第三方库,与Webpack缓存等信息技术相关。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

runtimeChunk

在这里插入图片描述
转载其他介绍:https://segmentfault.com/a/1190000010317802#articleHeader10

splitChunks.cacheGroups

  1. 抽离第三方库
第一种方式:
optimization: {
        runtimeChunk: 'single', 
        splitChunks: {  
            cacheGroups: { 
                vendors: {  
                    test: /[\\/]node_modules[\\/]/,
                    name: 'vendors',
                    chunks: 'all'
                },
            }
        },
    },
    会抽离出第三库的代码,生成一个vendors.db5b3f3dc26a5ebe685c.js文件,且每次打包第三库的hash也不会变化,
    这样就会利用浏览器的缓存机制,达到一个缓存优化,除非第三方库的版本变化,会重新生成一个新的文件,这样浏览
    器也会重新请求新的文件。

第二种方式:  
optimization: {
        runtimeChunk: 'single', 
        splitChunks: {  
            cacheGroups: { 
                commons: {
                    name: 'commons',
                    chunks: 'initial',
                    minChunks: 2
                  },
            }
        },
    },  
    这种方式也会抽离出一个commons.fgd453535ftg.js文件,与第一种方式的不同是,它不仅仅抽离第三方库,
    且会把所有js模块间引入的重复代码,也会抽离到commons.fdsfs534534g.js文件中。
    
	总结:可以根据自己的项目情况选择配置,因为第三库不需要每次都去加载,再没有版本变化的时候,
	只需要变化变更的业务逻辑代码,这样来达到一个缓存优化的目的
<think>嗯,用户想了解如何通过Webpack配置实现缓存的最佳实践。我需要回忆一下Webpack中关于缓存优化的常见方法。首先,我记得输出文件名使用哈希是一个基本步骤,这样可以确保文件内容变化时文件名也会变化,浏览器就会重新加载新的文件。应该提到使用[chunkhash]或者[contenthash],特别是对于CSS文件,contenthash更合适。 然后是代码分割,把第三方库和公共模块单独打包。比如用SplitChunksPlugin来分离vendor和runtime。这样用户浏览器可以缓存这些不常变动的部分,减少重复下载。需要解释为什么分开这些文件有助于缓存。 接下来是持久化缓存,通过设置cache选项,使用filesystem缓存类型,这样能加快构建速度。不过这个在开发环境和生产环境中的配置可能不同,需要提到开发环境中可能更关注构建速度,而生产环境需要优化输出。 还有使用runtimeChunk,把运行时代码单独分离,避免因为运行时代码的变化影响其他chunk的哈希值。这个对长期缓存很重要。 可能还需要提到CSS提取,比如用MiniCssExtractPlugin来单独生成CSS文件,并用contenthash。这样CSS的修改不会影响JS文件的缓存。 另外,模块标识符的问题,以前Webpack可能会有module.id的变化导致不必要的缓存失效,所以需要设置optimization.moduleIds为deterministic或者hashed,不过现在Webpack5可能已经默认处理了。需要确认一下。 还有,确保引用正确的配置文件,比如开发和生产环境分开,开发环境可能不需要哈希,而生产环境需要。引用中提到的创建webpack.dev.js和webpack.prod.js,这点要强调。 需要检查用户的引用内容,引用1、4提到持久化缓存,引用2、3提到配置文件分离。所以在回答中要结合这些点,比如配置分离,使用入口来管理第三方库,使用插件优化结构等。 可能还需要提到HTMLWebpackPlugin自动注入带哈希的资源,避免手动修改HTML。另外,在开发环境中使用devServer的配置可能关注快速重建,而生产环境关注缓存和优化。 最后,生成的相关问题需要考虑用户可能的后续疑问,比如如何验证配置是否生效,如何解决缓存击穿,或者如何结合CDN使用缓存策略。</think>### Webpack缓存配置最佳实践分步说明 通过Webpack实现高效缓存需重点处理输出文件哈希、代码分割、持久化缓存三个方面,以下是详细配置步骤: 1. **文件名哈希策略** ```javascript output: { filename: 'js/[name].[contenthash:8].js', chunkFilename: 'js/[name].[chunkhash:8].js' } ``` - 主文件使用`contenthash`,确保内容变化才改变哈希值 - 第三方库使用`chunkhash`,保持独立版本标识[^4] 2. **代码分割优化** ```javascript optimization: { splitChunks: { chunks: 'all', cacheGroups: { vendor: { test: /[\\/]node_modules[\\/]/, name: 'vendors' } } }, runtimeChunk: { name: 'runtime' } } ``` - 分离第三方库到vendors文件 - 提取运行时代码到独立runtime文件[^1] 3. **CSS资源缓存 ```javascript plugins: [ new MiniCssExtractPlugin({ filename: 'css/[name].[contenthash:8].css' }) ] ``` - CSS文件单独使用contenthash - 确保样式修改不影响JS文件缓存 4. **持久化缓存配置 ```javascript cache: { type: 'filesystem', buildDependencies: { config: [__filename] } } ``` - Webpack5+推荐文件系统缓存 - 提升二次构建速度30%以上 5. **环境区分配置 ```javascript // webpack.prod.js module.exports = merge(baseConfig, { mode: 'production', output: { filename: '[name].[contenthash].js' } }); // webpack.dev.js module.exports = merge(baseConfig, { mode: 'development', cache: { type: 'memory' } }); ``` - 生产环境使用完整哈希策略 - 开发环境启用内存缓存提升速度[^3] 6. **模块标识稳定 ```javascript optimization: { moduleIds: 'deterministic' } ``` - 防止模块顺序变化导致哈希变更 - 保持长期缓存稳定性
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值