03.webpack中hash,chunkhash和contenthash 的区别
-
hash、contenthash 和 chunkhash 是通过散列函数处理之后,生成的一串字符,可用于区分文件。
作用:善用文件的哈希值,解决浏览器缓存导致的资源未及时更新的问题
1.文件名不带哈希值
const path = require('path')
const HtmlWebpackPlugin = require('html-webpack-plugin')
const { srcPath, distPath } = require('./paths')module.exports = {entry: {index: path.join(srcPath, 'index.js'),other: path.join(srcPath, 'other.js')},module: {rules: []},plugins: [// 多入口 - 生成 index.htmlnew HtmlWebpackPlugin({template: path.join(srcPath, 'index.html'),filename: 'index.html',// chunks 表示该页面要引用哪些 chunk (即上面的 index 和 other),默认全部引用chunks: ['index'] // 只引用 index.js}),// 多入口 - 生成 other.htmlnew HtmlWebpackPlugin({template: path.join(srcPath, 'other.html'),filename: 'other.html',chunks: ['other'] // 只引用 other.js})]
}
- 默认打包的情况下,打包出来的文件是不带哈希值的
2. 问题所在
每一次编译后,生成的文件名都一样,这样会存在一个问题,通过 webpack 编译生成的静态文件会被我们放置到服务器中,当编译后的文件更新时,由于浏览器或者服务器设置的缓存策略,同名文件可能不会立刻被更新
,导致用户访问到的仍然是上一次的版本。
3.hash
为了解决这个问题,我们通常会在文件名上加一些哈希值,保证当更新文件时,浏览器会重新下载资源。这里使用 hash这个占位符
const path = require('path')
const webpack = require('webpack')
const { CleanWebpackPlugin } = require('clean-webpack-plugin')
const webpackCommonConf = require('./webpack.common.js')
const { smart } = require('webpack-merge')
const { srcPath, distPath } = require('./paths')module.exports = smart(webpackCommonConf, {mode: 'production',output: {// filename: 'bundle.[contentHash:8].js', // 打包代码时,加上 hash 戳filename: '[name].[contentHash:8].js', // name 即多入口时 entry 的 keypath: distPath,// publicPath: 'http://cdn.abc.com' // 修改所有静态文件 url 的前缀(如 cdn 域名),这里暂时用不到},module: {rules: []},plugins: [new CleanWebpackPlugin(), // 会默认清空 output.path 文件夹new webpack.DefinePlugin({// window.ENV = 'production'ENV: JSON.stringify('production')})]
})
- 打包出来如下,带上hash值
- 当项目里没有文件发生改变时,无论如何重新编译,文件哈希值都不会变。但此时,改变了
index.js
文件,增加一句输出,所有文件的哈希值都会同时改变。 - 所存在的问题: 所有文件的哈希值都发生了变化,
导致即使只更新了一个文件都需要重新加载所有资源
,还是有些浪费性能的
4.chunkhash
这里是多入口的项目,只改变了 index.js这个入口,不希望 other.js入口的文件也被修改,就可以使用占位符 chunkhash
来解决,另外哈希值比较长,截取八位显示。
module.exports = {// 部分配置省略output: {// filename: 'bundle.[contentHash:8].js', // 打包代码时,加上 hash 戳filename: '[name].[chunkhash:8].js', // name 即多入口时 entry 的 keypath: distPath,// publicPath: 'http://cdn.abc.com' // 修改所有静态文件 url 的前缀(如 cdn 域名),这里暂时用不到},plugins: [],
};
- 可以看到同一个 chunk 打包出来的哈希值是一样的,在同一个入口中的hash是一样的
- 当修改了 css 文件时,只有同 chunk 的 main.js 和 main.css 文件的哈希值发生了改变,
- css 文件是在 main.js这个 chunk 的,但 other.js本身没有发生任何修改,可以不用重新加载
5.contenthash
同一个 chunk 中,部分文件修改导致所有文件的哈希值发生变化的问题,可以使用 contenthash
来解决,contenthash
只和每一个文件的内容有关,内容发生变化,则重新生成哈希值
module.exports = {// 部分配置省略output: {filename: '[name]_[contenthash:8].js',path: path.resolve(__dirname, "./dist"),},plugins: [new MiniCssExtractPlugin({filename: './[name]_[contenthash:8].css',}),],
};
- 每一个文件生成的哈希值都不一样
- 在index.js中多新增一行代码在打包,可以看到
main
中csshash
不会发生变化
总结
在 webpack 中有三种生成哈希值规则的方式,可以用来区分文件是否修改。
hash 与整个项目
有关,项目里有文件修改,所有文件的哈希值都会变化。chunkhash 与入口
有关,同一入口的文件被视为一个整体,当其中一个文件修改时,同入口的所有文件哈希值发生改变。contenthash 只与文件内容有关,
文件内容发生改变,才会更改该文件的哈希值。
相关文章:

03.webpack中hash,chunkhash和contenthash 的区别
hash、contenthash 和 chunkhash 是通过散列函数处理之后,生成的一串字符,可用于区分文件。 作用:善用文件的哈希值,解决浏览器缓存导致的资源未及时更新的问题 1.文件名不带哈希值 const path require(path) const HtmlWebpac…...

OpenAI前CEO萨姆·阿尔特曼可能重返CEO职位;用LoRA微调LLM的实用技巧
🦉 AI新闻 🚀 OpenAI前CEO萨姆阿尔特曼可能重返CEO职位 摘要:据报道,OpenAI前CEO萨姆阿尔特曼有望重新担任CEO职位,并对公司董事会进行重大改变。微软等投资人正努力恢复阿尔特曼的职位,尽管董事会仍然是…...
修改docker默认数据目录
前言: docker默认数据目录是/var/lib/docker,根目录的存储空间有限,我们往往不能使用默认配置,需要创建空间相对较大的数据data目录 停止docker服务 systemctl stop docker 编辑配置文件 vi /etc/docker/daemon.json 增加选项 “graph”…...

wpf devexpress post 更改数据库
这个教程示范如何使用GridControl编辑数据,和保存更改到数据库。这个教程基于前一个篇。 Items Source Wizard 当 CRUD (Create, Read, Update, Delete) 启动选项时添加Post data功能 Items Source Wizard 生成如下代码: 1、设置 TableView.ShowUpdat…...
Ubuntu 18.04/20.04 LTS 操作系统设置静态DNS
1、nano /etc/systemd/resolved.conf 2、修改配置 使用DNS服务器:223.5.5.5 223.6.6.6 [Resolve] DNS223.5.5.5 223.6.6.6 3、重启服务 systemctl restart systemd-resolved.service 4、查看解析文件 cat /run/systemd/resolve/resolv.conf # This file is man…...
VSCode使用MinGW中的go并支持CGO
在Windows中,如果想使用Linux下的一些命令或者开发工具,可以安装Cygwin或者MinGW,MinGW相比Cygwin要轻量得多,笔者就安装的MinGW,但是安装MinGW后,如果把它加到Windows系统的PATH环境变量中,则可…...
tensor张量 ------ python特殊的数据结构
点赞收藏关注! 如需转载请注明出处! 张量与数组和矩阵非常相似。 在PyTorch中,使用张量来编码模型的输入和输出,以及模型的参数。 张量可以在GPU或其他硬件加速器上运行。 张量和NumPy数组通常可以共享相同的底层内存,…...
openai/chatgpt的api接口,各个模型的最大输入token一览表
chatgpt的各个3.5api模型接口的最大输入量一览表: MODELDESCRIPTIONCONTEXT WINDOWTRAINING DATAgpt-3.5-turbo-1106Updated GPT 3.5 Turbo New The latest GPT-3.5 Turbo model with improved instruction following, JSON mode, reproducible outputs, parallel…...
Spark作业串行与并行提交job
在Scala中,您可以以串行和并行的方式提交Spark作业。看看如何使用for和par.foreach构造对应的例子。 串行Spark作业(使用for) // 串行Spark作业设置 for (tag <- tags) {spark.sparkContext.setJobGroup(tag.toString, s"Tag: $tag…...

HTTP HTTPS 独特的魅力
目录 HTTP协议 HTTP协议的工作过程 首行 请求头(header) HOST Content-Length编辑 User-Agent(简称UA) Referer Cookie 空行 正文(body) HTTP响应详解 状态码 报文格式 HTTP响应格式 如何…...
【nlp】2.5(gpu version)人名分类器实战项目(对比RNN、LSTM、GRU模型)工程管理方式
人名分类器实战项目 0 说明1 工程项目设计2 数据预处理data_processing3 创建模型model4 模型测试test5 训练配置config6 模型训练train7 模型对比绘图plotfigure8 模型预测predict9 代码测试demo0 说明 本项目对前一个博客内容2.5(cpu version) 人名分类器实战项目(对比RNN、…...

金蝶云星空对接打通旺店通·旗舰奇门采购退料单查询接口与创建货品档案接口
金蝶云星空对接打通旺店通旗舰奇门采购退料单查询接口与创建货品档案接口 来源系统:金蝶云星空 金蝶K/3Cloud在总结百万家客户管理最佳实践的基础上,提供了标准的管理模式;通过标准的业务架构:多会计准则、多币别、多地点、多组织、多税制应用…...

在线识别二维码工具
具体请前往:在线二维码识别解码工具--在线识别并解码二维码网址等内容...

CICD 持续集成与持续交付——git
git使用 [rootcicd1 ~]# yum install -y git[rootcicd1 ~]# mkdir demo[rootcicd1 ~]# cd demo/ 初始化版本库 [rootcicd1 demo]# git init 查看状态 [rootcicd1 demo]# git status[rootcicd1 demo]# git status -s #简化输出 [rootcicd1 demo]# echo test > README.md[roo…...

光纤的跳线和尾纤
光纤跳线和光纤尾纤在结构上、连接方式、应用场景等方面存在明显的区别。 光纤跳线有0.9、2.0、3.0,通常是区分光缆外径的。0.9光缆外径0.9mm的,2.0光缆外径2mm,3.0光缆外径3mm。 同时分单模光纤跳线和多模光纤跳线。单模一般是黄色ÿ…...

SQL SERVER 2008安装教程
SQL SERVER 2008安装教程 本篇文章介绍了安装SQL Server 2008企业版的软硬件配置要求,安装过程的详细步骤,以及需要注意的事项。 安装步骤 (1). 在安装文件setup.exe上,单击鼠标右键选择“以管理员的身份运行”,如下图所示&#…...

好莱坞罢工事件!再次警醒人类重视AI监管,人工智能矛盾一触即发!
原创 | 文 BFT机器人 关注国外新闻的应该都知道,最近焦点新闻是好莱坞史上最大规模的一场罢工运动。这场维持118天的罢工运动,终于在11月9号早上12点在好莱坞宣布结束。这场罢工运动虽是演员工会和代表资方的影视制片人联盟的茅盾,但直接引发…...

深度学习系列54:使用 MMDETECTION 和 LABEL-STUDIO 进行半自动化目标检测标注
参考https://mmdetection.readthedocs.io/zh-cn/latest/user_guides/label_studio.html,这里进行简要概述: 1. 启动目标检测服务 在mmdetection文件夹中,执行 label-studio-ml start projects/LabelStudio/backend_template --with \ conf…...
WSL2环境下Debian 12的Docker安装与配置
WSL设置相关: wsl -l -v # 查看当前配置情况正常配置如下: NAME STATE VERSION * Debian Running 2如果与以上有差异,按如下步骤进行配置: wsl --set-version 2 wsl --set-default-version 2 wsl --s…...

11 月 11 日 ROS 学习笔记——ROS 架构及概念
文章目录 前言一、 ROS 文件系统级1). 工作空间 Ws2). 功能包3). 消息 msg4). 服务 srv 二、计算图级1). 动态加载节点 nodelet2). 主题 topic3). 服务 srv4). 消息 msg5). 试用练习5). 创建工作空间6). 创建 ROS 功能包和元功能包7). 编译ROS功能包8). 使用 ROS 节点9). 使用主…...

【JavaEE】-- HTTP
1. HTTP是什么? HTTP(全称为"超文本传输协议")是一种应用非常广泛的应用层协议,HTTP是基于TCP协议的一种应用层协议。 应用层协议:是计算机网络协议栈中最高层的协议,它定义了运行在不同主机上…...
多场景 OkHttpClient 管理器 - Android 网络通信解决方案
下面是一个完整的 Android 实现,展示如何创建和管理多个 OkHttpClient 实例,分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...

PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建
制造业采购供应链管理是企业运营的核心环节,供应链协同管理在供应链上下游企业之间建立紧密的合作关系,通过信息共享、资源整合、业务协同等方式,实现供应链的全面管理和优化,提高供应链的效率和透明度,降低供应链的成…...
Robots.txt 文件
什么是robots.txt? robots.txt 是一个位于网站根目录下的文本文件(如:https://example.com/robots.txt),它用于指导网络爬虫(如搜索引擎的蜘蛛程序)如何抓取该网站的内容。这个文件遵循 Robots…...

NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合
在汽车智能化的汹涌浪潮中,车辆不再仅仅是传统的交通工具,而是逐步演变为高度智能的移动终端。这一转变的核心支撑,来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒(T-Box)方案:NXP S32K146 与…...

宇树科技,改名了!
提到国内具身智能和机器人领域的代表企业,那宇树科技(Unitree)必须名列其榜。 最近,宇树科技的一项新变动消息在业界引发了不少关注和讨论,即: 宇树向其合作伙伴发布了一封公司名称变更函称,因…...

Ubuntu Cursor升级成v1.0
0. 当前版本低 使用当前 Cursor v0.50时 GitHub Copilot Chat 打不开,快捷键也不好用,当看到 Cursor 升级后,还是蛮高兴的 1. 下载 Cursor 下载地址:https://www.cursor.com/cn/downloads 点击下载 Linux (x64) ,…...

链式法则中 复合函数的推导路径 多变量“信息传递路径”
非常好,我们将之前关于偏导数链式法则中不能“约掉”偏导符号的问题,统一使用 二重复合函数: z f ( u ( x , y ) , v ( x , y ) ) \boxed{z f(u(x,y),\ v(x,y))} zf(u(x,y), v(x,y)) 来全面说明。我们会展示其全微分形式(偏导…...

英国云服务器上安装宝塔面板(BT Panel)
在英国云服务器上安装宝塔面板(BT Panel) 是完全可行的,尤其适合需要远程管理Linux服务器、快速部署网站、数据库、FTP、SSL证书等服务的用户。宝塔面板以其可视化操作界面和强大的功能广受国内用户欢迎,虽然官方主要面向中国大陆…...

HTML版英语学习系统
HTML版英语学习系统 这是一个完全免费、无需安装、功能完整的英语学习工具,使用HTML CSS JavaScript实现。 功能 文本朗读练习 - 输入英文文章,系统朗读帮助练习听力和发音,适合跟读练习,模仿学习;实时词典查询 - 双…...