【八股系列】webpack打包时Hash码是怎样生成的?随机值存在一样的情况,如何避免?

文章目录

  • 1. Hash码的生成
  • 2. 避免Hash码一致
    • 2.1 确保文件内容唯一:
    • 2.2 使用chunkhash:
    • 2.3 增加文件名前缀:
    • 2.4 优化哈希算法:
    • 2.5 使用Module IDs:
    • 2.6 配置webpack输出选项:
  • 3. 配置生成Hash的规则

1. Hash码的生成

webpack打包过程中,hash码并不是随机生成的,而是基于文件内容的哈希值。这个哈希值是通过对文件内容进行哈希运算(通常是SHA-1MD5)来得到的,确保内容的任何变化都会导致生成不同的哈希值。这样做的目的是确保每次文件内容有变动时,输出的文件名也会相应改变,从而强制浏览器重新下载更新的资源

2. 避免Hash码一致

当两个不同的文件意外地生成相同的hash值时,这通常是因为它们的内容实际上是相同的,或者在哈希算法的极小概率事件下出现了碰撞。为了减少这种可能性并确保每个文件的hash码是唯一的,可以采取以下策略:

2.1 确保文件内容唯一:

  • 确保每个模块或文件都有其独特的标识,避免重复的代码或资源。
  • 如果是动态生成的文件,确保每次生成的内容都有微小差异。

2.2 使用chunkhash:

  • 除了hash之外,webpack还提供了chunkhashchunkhash是基于整个chunk(也就是按需加载的模块组合)的哈希,而不是单个文件。这更适用于代码分割,因为它只会在chunk内容改变时更新。

2.3 增加文件名前缀:

  • 可以在webpack配置中添加一个前缀或者时间戳,这将确保即使哈希碰撞,文件名也是唯一的。

2.4 优化哈希算法:

  • 可以考虑调整webpack使用的哈希算法,选择一个更不容易出现碰撞的算法。如:SHA-256SHA-3,它们的碰撞概率更低。

2.5 使用Module IDs:

  • Webpack 4引入了contenthash,它是基于模块内容的哈希,可以用于避免因为模块ID相同而导致的哈希冲突。

2.6 配置webpack输出选项:

  • 确保webpack的输出配置output.filenameoutput.chunkFilename正确设置了哈希模式,例如[name].[chunkhash].js

通过以上方法,可以有效地降低hash码重复的可能性,确保webpack打包后的文件名能够准确反映文件内容的变化。

3. 配置生成Hash的规则

webpack配置文件(通常为webpack.config.js)中,你可以通过设置output对象的filenamechunkFilename属性来控制输出文件的命名方式,包括使用hashchunkhash。下面是一个例子:

const path = require('path');module.exports = {// 其他配置...output: {path: path.resolve(__dirname, 'dist'), // 输出目录filename: '[name].[contenthash].js', // 普通文件的命名,使用contenthashchunkFilename: '[name].[contenthash].chunk.js', // chunk文件的命名,也使用contenthash},// 其他配置...
};

在这个配置中,[name]代表每个chunk的名称,而[contenthash]则是基于chunk内容生成的哈希值。每次你的代码发生变化,这些哈希值就会更新,确保浏览器会获取到最新的文件

如果想要使用hash而不是contenthash,只需要将上面的[contenthash]替换为[hash]即可:

filename: '[name].[hash].js',
chunkFilename: '[name].[hash].chunk.js',

hash是基于整个项目的哈希,而contenthash是基于每个单独chunk的哈希。在大多数情况下,contenthash是更好的选择,因为它只在相关代码更改时才更新,减少了不必要的文件重命名

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/17477.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

简单四步完成基于云服务器ARL资产侦察灯塔系统搭建

简单四步完成基于云服务器ARL资产侦察灯塔系统搭建及使用 前言 官网介绍:ARL全称-Asset Reconnaissance Lighthouse,中文含义:资产侦察灯塔系统。 旨在快速侦察与目标关联的互联网资产,构建基础资产信息库。 协助甲方安全团队或…

Elasticsearch reindex操作

需求 我有一个index:test_1,这个index由于各种原因,mapping中出现了下面的type: "u_ori_id_list" : {"type" : "text","fields" : {"keyword" : {"type" : "…

DragonKnight CTF复现(一)

这次的 re 题也是挺难的,按 wp 来学习一波 elec_go 下次遇到这种给了很多东西,又不知道怎么分析的,先百度一下。 Electron程序逆向(asar归档解包)_asar解包-CSDN博客 [原创] electron开发、打包与逆向分析-软件逆向-…

AutoDL搭建 ChatGLM3

租用新实例 这里选择的西北 B 区、RTX 409024GB 创建虚拟环境并激活 # 安装虚拟环境至数据盘 conda create --prefix /root/autodl-tmp/envs/chatglm3-demo python3.10# 激活虚拟环境 conda activate /root/autodl-tmp/envs/chatglm3-demo拉取ChatGLM3仓库代码 # 开启学术…

代码随想录算法训练营第七天| 454.四数相加II 、383. 赎金信、 15. 三数之和、18. 四数之和

454.四数相加II 题目链接: 454.四数相加II 文档讲解:代码随想录 状态:没做出来,没想到考虑重复的情况! 题解: public int fourSumCount(int[] nums1, int[] nums2, int[] nums3, int[] nums4) {// 结果计数…

Python调用科大讯飞在线语音合成API --内附完整项目

一,注册讯飞账号,并实名制。 讯飞开放平台-以语音交互为核心的人工智能开放平台 (xfyun.cn) 二、找到音频合成,按页面提示申请免费试用。 在线语音合成_免费试用-讯飞开放平台 (xfyun.cn) 三、申请免费使用后,找到API信息如下…

Oracle Active DataGuard 启用实时应用 REDO

Oracle Active DataGuard 启用实时应用 REDO 启用 ADG Real-Time apply 模式(只要主库事务提交,备库这边即开始应用事务日志):1、将备机先退出恢复管理模式 SQL> alter database recover managed standby database cancel; 2、…

vscode远程登录阿里云服务器【使用密钥方式--后期无需再进行密码登录】【外包需要密码】

1:windows主机上生成【私钥】【公钥】 1.1生成公钥时不设置额外密码 1.2生成公钥时设置额外密码【给外包人员使用的方法】 2:在linux服务器中添加【公钥】 3:本地vscode连接linux服务器的配置 操作流程如下 1.1本地终端中【生成免密登录…

从0到100,渠道码如何成为SaaS企业增长的加速器

在当今数字化时代,企业的增长策略已不再是单一和线性的。渠道码的出现,为SaaS(软件即服务)企业提供了一种全新的、多维度的增长途径,真正实现了从0到100的快速增长。 一、渠道码的高可定制性和灵活性,为Sa…

基于.NetCore和ABP.VNext的项目实战二:Swagger

Mag.Blog.Swagger层添加Volo.Abp.AspNetCore和Swashbuckle.AspNetCore包,引用实体层.Domain 添加模块类MagBlogSwaggerModule.cs,依赖MagBlogDomainModule模块,并且重写ConfigureServices和OnApplicationInitialization方法 namespace Mag.Blog.Swagger {[DependsOn(typeof…

位置编码(三) 2D旋转位置编码

Rotary Position Embedding for Vision Transformer https://arxiv.org/abs/2403.13298 Transformer升级之路:4、二维位置的旋转式位置编码 https://kexue.fm/archives/8397 Transformer升级之路:17、多模态位置编码的简单思考 https://kexue.fm/archive…

错误提示:“由于找不到steam_api.dll,无法继续执行代码”修复方法,缺少steam_api.dll文件原因

在尝试运行某些游戏或程序时,用户可能会遇到一个常见的错误提示:“由于找不到steam_api.dll,无法继续执行代码”。这个错误信息表明,系统在启动程序或游戏时无法定位到必要的steam_api.dll文件,这是一个关键的动态链接…

第五更 | 单引号、转义符、双引号、反引号

单引号 在单引号内的都是纯字符,哪怕是空格、特殊字符 [rootyaomm yaomm]# touch ‘*.log’ ##→创建一个名称带【*】的log文件 [rootyaomm yaomm]# ls *.log ##→使用单引号也可以将其当作普通字符 *.log 转义符 转义符可以将特殊字符,例如…

香橙派 AIpro的NPU随手记体验日记

昇腾AI 技术路线 8TOPS INT8(FP16)AI算力 LPDDR4X 8GB/16GB 📅 20240525 开放了原理图和源码,功能接口就不描述了手册都有描述,新手好好学习可以从底层覆盖到应用一个载板拿下 完成香橙派AIpro上手体验 镜像安装&am…

C++学习---string模拟实现(2)

1.随机插入一个字符串 (1)insert函数插入一个字符的方法我们在之前的模拟实现里面已经搞过了,那个里面要注意的是这个全体向后挪动的循环过程,这个里面我们要实现的是插入字符串的模拟实现; (2&#xff0…

网上3d全景虚拟交互展馆沉浸式体验让客户和使用者都满意

在数字化浪潮席卷而来的今天,3D场景网站已成为众多行业展现创意与实力的新舞台。然而,传统的3D建模软件往往因其复杂性和高门槛,让许多渴望创建逼真3D场景的用户望而却步。 幸运的是,华锐视点推出了搭建3D场景网站的编辑器——一款…

怎么做图片海报二维码?扫码查看图片内容

现在很多的宣传推广海报会放入二维码中,然后将二维码分享给用户后,通过扫码的方式来查看图片内容,从而获取自己需要的信息,经常在活动宣传、商品推广、旅游攻略等场景下使用。二维码可以提供更加便捷的内容获取方式,让…

[图解]企业应用架构模式2024新译本讲解02-表数据入口

1 00:00:00,420 --> 00:00:04,330 这个案例,我们就是用书上的案例了 2 00:00:06,080 --> 00:00:08,860 收入确认的一个案例 3 00:00:09,510 --> 00:00:11,100 书上讲了,收入确认 4 00:00:13,330 --> 00:00:15,270 就是说,你给…

一文搞透常见的Python编码陷阱(下)(分析+案例)

一个认为一切根源都是“自己不够强”的INTJ 个人主页:用哲学编程-CSDN博客专栏:每日一题——举一反三Python编程学习Python内置函数 Python-3.12.0文档解读 目录 一、当心多目标赋值中的可变变量 示例 扩展讲解 示例 增广赋值中的可变变量 示例 扩展讲解 示例 总…

python 遍历从重命名文件夹下的所有文件

收到一个文件包,里面的文件命名是1.png、2.png……但在手机上打开时,是按1/10/11/12这样排序的,不是按数字从小到大。因此,需要将所有的文件重命名为001.png这种带0前缀的格式。 import os import redef traverse_rename(path):f…