当前位置: 首页 > news >正文

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

文件指纹就是打包后输出文件的后缀,每次构建都会生成不同的文件后缀,这样可以防止浏览器的默认缓存,使客户端代码可以及时修改。

文件指纹的三种方式:

  •  hash ‌:基于整个项目构建内容生成全局哈希值,任何文件修改都会导致值变化,不适合缓存优化。 ‌
  •  chunkhash ‌:为每个入口文件生成独立哈希值,仅当文件或依赖模块内容变化时更新,利于缓存控制,适合用于入口文件及其依赖模块的缓存优化。 ‌
  •  contenthash ‌:根据文件内容生成哈希值,内容不变则值不变,常用于CSS/JS等静态资源。
npm install mini-css-extract-plugin -D
npm i copy-webpack-plugin -D  
// webpack.config.js
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
const CopyWebpackPlugin = require('copy-webpack-plugin');
module.exports = {output: {// 对于 JS 文件,通常使用 chunkhashfilename: 'js/[name].[chunkhash:8].js',// 对于非入口 chunk,如异步加载的模块chunkFilename: 'js/[name].[chunkhash:8].chunk.js',// 输出目录path: path.resolve(__dirname, 'dist')},module: {rules: [{test: /\.css$/,use: [{loader: MiniCssExtractPlugin.loader,},'css-loader']}]},plugins: [// 对于 CSS 文件,使用 contenthashnew MiniCssExtractPlugin({filename: 'css/[name].[contenthash:8].css',chunkFilename: 'css/[name].[contenthash:8].chunk.css'}),// 处理图片等资源new CopyWebpackPlugin({patterns: [{from: path.resolve(__dirname, 'src/assets'),to: 'assets/[name].[hash:8].[ext]'}]})]
};

说明

总结

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

相关文章:

  • 基于 OpenCV 与 Mediapipe 的二头肌弯举追踪器构建指南:从环境搭建到实时计数的完整实现
  • 【CV】图像基本操作——①图像的IO操作
  • 系统架构设计师-计算机系统存储管理-页式、段氏、段页式模拟题
  • [系统架构设计师]专业英语(二十二)
  • Python爬虫第四课:selenium自动化
  • Qwt7.0-打造更美观高效的Qt开源绘图控件库
  • macbook国内源安装rust
  • leetcode LCR 012.寻找数组的中心下标
  • 如何在 Jenkins 中安装 Master 和 Slave 节点以优化 CI/CD 流程
  • init.environ.rc详解
  • CORS解决跨域问题的多个方案 - nginx站点配置 / thinkphp框架内置中间件 / 纯前端vue、vite的server.proxy代理
  • THM Rabbit Hole
  • 安全合规:AC(上网行为安全)--中
  • 【iOS】内存管理及部分Runtime复习
  • Next.js 15.5.0:探索 Turbopack Beta、稳定的 Node.js 中间件和 TypeScript 的改进
  • 力扣每日一题保持手感——498.对角线遍历
  • Node.js特训专栏-性能优化:24.V8引擎内存管理机制
  • ADQ3系列USB 3.2接口版本数字化仪隆重登场
  • 力扣82:删除排序链表中的重复元素Ⅱ
  • 十分钟速通集群
  • Linux 软件编程(十一)网络编程:TCP 机制与 HTTP 协议
  • DataEase+MaxKB:让BI再多个“A”
  • 从零开始学习单片机15
  • 【OLAP】trino客户端访问Trino CLI和JDBC
  • 如何恢复删除的照片和视频?视频照片恢复的专业指南
  • zookeeper基础概念及部署
  • 蛋白质结构信息学大纲
  • Linux(四):进程状态
  • 计算机毕业设计 java 血液中心服务系统 基于 Java 的血液管理平台Java 开发的血液服务系统
  • 如何清除 Docker 容器的日志 ?