webpack通过hash控制文件缓存

为什么前端打包出来的静态文件名字是一串 Hash 值 ? 前端打包时使用 Hash 值作为静态文件名,主要是为了缓存优化、版本管理和避免缓存污染。当文件内容发生变化时,打包工具会生成不同的 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

Angular项目构建中的Hash详解 在使用Angular进行项目开发时,ng serve命令是我们经常使用的一个工具,用于启动本地开发服务器并实时编译我们的代码。在编译过程中,Angular会生成一个独特的哈希值,用于标识每个构建版本。这个哈希值在开发过程中扮演着重要的角色,下面我们将详细探讨这个哈希值的生成、用途以及如何在实际项目中利用它。 阅读详情

相关推荐

webpack-plugin-hash-output:用于使用最终文件内容的md5哈希替换webpack chunkhash的插件

webpack插件哈希输出 插件以最终文件内容的md5哈希替换webpack chunkhash。 安装 与npm npm install webpack-plugin-hash-output --save-dev 带纱 yarn add webpack-plugin-hash-output --dev 为什么? 还有其他的webpack插件可以在那里散列。 但是,当它们运行时,它们不会“看到”代码的最终形式,因为它们在诸如webpack.optimize.UglifyJsPlugin插件之前运行。 换句话说,如果您更改webpack.optimize.UglifyJsPlugin配置,

webpack编译后的文件防止缓存解决方案

场景:项目使用的是后端模版返回首页,首页里面有一个js链接,该链接指向的是使用webpack编译过后的代码。由于编译后的文件名称需要在index.vm 中引入,因此,不能给文件名加hash值。那么该如何解决js文件的缓存问题呢? 首先,js缓存的原因是因为浏览器会对相同的get请求进行缓存,那么如果我们改变每次请求的名称,其实就不会有缓存了。 一开始使用的方式是直接在编译后的js文件后面加入 ?v

beiweideqidaozhe的专栏 1万+

Comsol超声空化气泡仿真:从基础理论到工业应用实践

本文详细介绍了Comsol超声空化气泡仿真的基础理论及工业应用实践。通过解析超声空化现象、Comsol模型搭建流程及求解器优化技巧,帮助工程师掌握气泡仿真技术,提升超声波清洗和乳液制备等工业应用的效率与质量。

weixin_27966471的博客 252

webpack打包神器(一)(再看webpack)

之前已经记录过一些零零碎碎的webpack知识点,今天又温习一遍 1.先来说模块化 就是将一个复杂的系统分解成若干个系统方便编码 2.自动化构建 构建的目的就是将源代码转换发布为线上可以执行的代码,内容包含 -代码转化:typescript转化为js。less转换为css -文件优化: 压缩js css html代码,压缩合并图片 -代码分割:提取多个页面的公共代码,提取首屏不需要执行...

zpcqdkf的博客 281

机器人抓取(一)—— ROS MoveIt! 程序控制真实UR5机器人运动(python)

接上篇:ubuntu18.04 ros-melodic 安装 ur_robot_driver,驱动真实的 ur5 机器人 上文在 ubuntu 系统中配置了ur 机器人ros功能包 universal_robot 和驱动 Universal_Robots_ROS_Driver,并实现了用 moveit_rviz 拖动机器人运动。本文旨在学习如何使用 moveit python 用户接口moveit_commander,实现真实的ur5 机器人轨迹规划与控制。 1. ur5 机器人控制 参考:MoveIt »

zxxRobot的博客 1万+

【密码学】生成8位26个字母和数字的全排列(密码字典,密钥)c++代码(非递归高效直接)

生成8位26个字母和数字的全排列(密钥)代码(非递归高效直接) 用C语言或C++,生成一个8位的26个字母和数字的全排列的原代码,例如从:00000000到ZZZZZZZZ。 说明:生成的这个字典会非常大,有36^8条记录,估计要3T的硬盘,跑一个晚上看看         这个方法比递归更高效,更直接。                                                ...

Wu_Being 的优快云 博客 1万+

webpack---优化_缓存

webpack---优化_缓存

weixin_43390711的博客 272

Unity新手必看:5分钟搞定TextMeshPro中文乱码,告别小方块(附7000+常用字库)

本文详细介绍了Unity中TextMeshPro中文乱码问题的解决方案,包括快速生成中文字体的步骤和优化技巧。通过使用支持中文的.ttf字体文件和自定义字符集,开发者可以在5分钟内解决TMP显示小方块的问题,提升游戏或应用的文本显示效果。

weixin_33095355的博客 362

webpack 缓存 hash

webpack.config.js 搜索:contenthash可以找到相关写法配置 const {resolve} = require('path'); const HtmlWebpackPlugin = require('html-webpack-plugin'); // 提取单独css文件 替代 style-loader const MiniCssExtractPlugin = require('mini-css-extract-plugin'); // 压缩css const OptimizeCss

mhbsoft的博客 436

ELK - CentOS7 安装 elasticsearch 7.17.5

elk elasticsearch 安装

qq_19783793的博客 1461

Spring Boot 调用豆包大模型如何开启联网搜索?

场景推荐方案有权限创建 Bot + 需强集成✅ 使用bot-xxxx无 Bot 权限 / 追求通用性✅ 自行集成搜索引擎 + 普通豆包模型仅需基础对话❌ 无需考虑联网豆包大模型确实支持联网搜索,但前提是:你用的是“智能体 Bot”,且它被配置了“网页搜索”插件,并调用正确的 API 端点。希望本文能帮你少走弯路,快速构建出真正“知天下事”的智能助手!

lpfasd123的博客 1123

html-webpack-plugin详解

引言 最近在react项目中初次用到了html-webapck-plugin插件,用到该插件的两个主要作用: 为html文件中引入的外部资源如script、link动态添加每次compile后的hash,防止引用缓存的外部文件问题 可以生成创建html入口文件,比如单页面可以生成一个html文件入口,配置N个html-webpack-plugin可以生成N个页面入口 有了这种插件,那么在项目中...

weixin_30877755的博客 684

工业级AI智能体落地:OpenClaw+ONNX Runtime全栈部署,端到端延迟压至12ms

OpenClaw+ONNX的组合为工业AI智能体的落地提供了一套完整、高效、安全的解决方案。它解决了传统云端智能体在工业场景中面临的延迟、安全和稳定性问题,实现了本地数据闭环和毫秒级响应。未来,随着边缘计算和轻量级大模型技术的发展,工业AI智能体将变得更加智能和强大。我们可以预见,在不久的将来,工厂里的每一台设备都将拥有自己的AI智能体,它们能够自主感知、自主决策、自主执行,真正实现工业生产的全自动化和智能化。👉 点击我的头像进入主页,关注专栏第一时间收到更新提醒,有问题评论区交流,看到都会回。

2601_94871597的博客 735

前端:构建工具(Vite / Webpack)的 文件指纹(File Hash) 机制 / 浏览器缓存控制

文件指纹(FileHash)是前端构建工具通过哈希算法生成内容标识的核心功能,用于实现精准缓存控制。Vite和Webpack分别采用不同占位符(如[hash]/[contenthash])生成8-20位哈希,生产环境默认开启。该机制带来三大优势:永久缓存(通过immutable策略)、版本隔离(避免覆盖冲突)和增量更新(仅下载变更文件)。最佳实践包括:配置8位contenthash、Nginx区分缓存策略(静态资源永久缓存+HTML禁用缓存),并确保开发环境关闭哈希。需注意哈希长度与碰撞风险的平衡,8位哈希

snow的博客 476

在ubuntu20.04中安装MATLAB时常见问题及解决方法

   如果你刚装完ubuntu20.04,这时你想要安装MATLAB2021A,在输入命令./install进行安装时,可能会报以下错误:    terminate called after throwing an instance of ‘JailContainerException’ what(): Error: 88: No JRE version parsed from/media/jzx/MATHWORKS_R2021A/sys /java/jre/glnxa64/jre/release   

慕羽★的博客 1万+

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

【Webpack】Hash 码

在 Webpack 中,Hash 码主要用来缓存控制,确保每次修改文件后生成的文件名是唯一的,从而避免缓存问题。hashchunkhash和。1)hash:Webpack 会针对整个项目构建生成一个唯一的 Hash 码,只要项目中有任何一个文件变化,生成的 Hash 码都会改变。2)chunkhash:Webpack 为每个 chunk 生成一个 Hash 码,只有当该 chunk 内容发生变化时,对应的 Hash 码才会改变。这在分离文件的情况下更为有效,减小了很多无关文件的缓存更改。3)

小秀的博客 870

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

构建工具中的 hash 与 contenthash作用:以 Webpack 和 Vite 为例

本文解析了前端构建工具中哈希值的核心作用与实现机制。Webpack提供三种哈希策略:[hash](全局构建级别)、[chunkhash](入口粒度)和[contenthash](内容级别),其中contenthash是最优选择。Vite默认采用基于内容的哈希策略,其[hash]占位符实际等同于Webpack的contenthash。文章对比了两种工具的哈希实现差异,并给出了开发/生产环境的最佳实践配置方案,强调内容哈希在缓存控制中的重要性。最后提供了Webpack和Vite的具体配置示例,帮助开发者实现精准

尽日寻春不见春,芒鞋踏遍陇头云。归来笑拈梅花嗅,春在枝头已十分。 1074

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

webpack-plugin-hash-output 使用指南

webpack-plugin-hash-output 使用指南 项目介绍 webpack-plugin-hash-output 是一个专门为 Webpack 设计的插件,其核心功能是将传统的 chunkhash 替换成基于最终文件内容的 MD5 哈希值。该插件确保每次编译时,如果输出的文件内容有任何变动,哈希值也会相应变化,从而解决缓存策略中的潜在冲突。特别地,它在 Webpack 的最后编译步骤...

gitblog_00193的博客 834

webpack 文档(指南) - 缓存 (hash、chunkhash和contenthash)

浏览器在多次访问静态资源文件的时候,如果该文件已经在本地缓存,并且它的名称没有改变,那么浏览器会认为它没有被更新,便不会去请求服务器,而是使用该静态资源的缓存版本。如果某个文件被更改,我们希望浏览器应该重新请求它,而不是使用缓存版本,所以文件被修改后,它的名称也应该被改变。 在 webpack 中,最后生成的 chunk 文件都是由一个个的 module 编译后组合而成的,浏览器请求的 JS 文件实际上就是一个个的 chunk 。当我们修改某个 module 后,其所属 chunk 打包后的 JS 文件名称

qq_36605165的博客 1040

webpack文件指纹:hash、chunkhash与contenthash详解

name]表示模块名称[hash:8]表示取哈希值的前 8 位通常建议将不同类型的文件放在不同目录(如 js/、css/、assets/)便于管理JS 文件推荐使用chunkhashCSS 文件推荐使用(需要配合图片等静态资源可以使用hash或哈希长度一般取 8-16 位即可,既能保证唯一性又不会过长。

m0_56885551的博客 574

Webpack-md5-hash 插件使用教程

Webpack-md5-hash 插件使用教程 1. 项目介绍 webpack-md5-hash 是一个用于替换标准 Webpack chunkhash 的插件。它通过使用 MD5 哈希算法来生成更稳定的 chunkhash,从而确保在文件内容没有变化时,生成的文件名不会发生变化。这有助于提高缓存利用率,减少不必要的资源重新加载。 2. 项目快速启动 安装 首先,你需要安装 webpack-md5...

gitblog_00015的博客 779

Vue项目打包优化:如何利用Webpack哈希策略解决浏览器缓存问题

本文深入解析了Vue项目打包后浏览器缓存导致代码不更新的问题,并提供了基于Webpack哈希策略的解决方案。重点对比了hash、chunkhash和contenthash三种策略的差异,推荐在生产环境中使用contenthash实现最精细的缓存控制。文章还提供了Vue CLI项目的具体配置步骤,并强调了服务端设置正确HTTP缓存头的重要性,以彻底解决浏览器缓存问题。

tcp8optimizer的博客 174

no-cache 配置

上面设置虽然都是 no-cache,但是他们的缓存对象和缓存作用是不同的。

amiaoyaofeixiang的博客 2885

bundle-loader实战避坑指南:chunk命名、哈希与缓存问题排查手册

bundle-loader 是 webpack 生态中经典的代码分割与懒加载 loader,它通过 `require.ensure` 把指定模块拆成独立 chunk,让页面实现真正的按需加载。本文是一份面向新手的 bundle-loader 实战避坑指南,聚焦 chunk 命名、哈希与缓存三大高频问题,提供一份可直接照做的排查手册,帮你快速定位并解决旧项目中的构建与加载难题。 > ⚠️ 友情提醒

gitblog_00083的博客 420

2秒构建提速90%:Webpack缓存策略全解析

Webpack作为现代前端工程化的核心工具,其构建性能直接影响开发效率。本文将深入解析Webpack的缓存机制,通过实战案例展示如何通过合理配置将构建时间从20秒压缩至2秒,实现90%的提速效果。 ## 🚀 Webpack缓存原理:从10秒到2秒的秘密 Webpack的缓存系统基于文件内容哈希和依赖关系追踪,通过避免重复处理未变更文件来提升构建速度。核心实现位于[lib/Cache.js](

gitblog_00867的博客 891

webpack+vite前端构建工具 - 9 webpack技巧性配置

resolve提供简便配置,编写业务代码时简化工作。alias 别名,提供路径的简写例如,@代表src目录(根目录)extensions 扩展省略,定义可省略的扩展名如定义js后缀可省略。

qq_37581764的博客 1307
上一篇: node脚本, 封装git命令
下一篇: 撸一个webpack基础配置
一号小白
博客等级 码龄9年 13粉丝 35原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值