我的编程空间,编程开发者的网络收藏夹
学习永远不晚

webpack打包的3种hash值详解

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

webpack打包的3种hash值详解

前言

大家好,我是林三心,用最通俗易懂的话讲最难的知识点是我的座右铭,基础是进阶的前提是我的初心

当年的校招

依稀记得,当年我参加了大厂的校招,面试的是网易雷火工作室,当时有一道题,我记得很清楚,就是:说说webpack中三种hash配置的区别

哈哈,我当时连webpack都不太会配置,所以也答不出来,然后也。。。没有然后了。。

哪三种?

webpack中的三种hash分别是:

  • hash:全局hash
  • chunkhash:分组hash
  • contenthash:内容hash

实践讲解

事先准备

准备三个文件:

  • main.js
import './main.css'

console.log('我是main.js')
  • console.js
console.log('我是console.js')
  • main.css
.title {
  color: #000;
}

打包环境搭建

打包环境的搭建我就不在这里详细讲了,想看的之后我会出一篇文章专门讲解。这里我就抽取精华部分。

  • webpack.config.js
// 多入口打包
entry: {
    main: './class="lazy" data-src/main.js',
    console: './class="lazy" data-src/console.js'
  },
// 输出配置
output: {
    path: path.resolve(__dirname, './dist'),
    // 这里预设为hash
    filename: 'js/[name].[hash].js',
    clean: true
  },
plugins: [
      // 打包css文件的配置
      new MiniCssExtractPlugin({
      // 这里预设为hash
      filename: 'styles/[name].[hash].css'
    })
]

hash

由于我们预设的是hash,所以我们直接运行打包npm run build,我们看看我们打包后的是什么东西

可以看到,所有文件的文件名hash值都是一致的,那我们现在改一下main.css这个文件

.title {
  // #000 改成 #fff
  color: #fff;
}

然后我们再运行npm run build打包,看看打包后的是什么东西:

可以看出,修改一个文件,所有文件的hash值跟着变

结论:牵一发动全身,只改了一个main.css,会导致打包后所有文件的hash值都改变。所以当打包名称设置为hash时,整个项目文件是一致的,修改其中一个会导致所有跟着一起改。

chunkhash

我们把输出文件名规则修改为chunkhash:

entry: {
    main: './class="lazy" data-src/main.js',
    console: './class="lazy" data-src/console.js'
  },
output: {
    path: path.resolve(__dirname, './dist'),
    // 修改为 chunkhash
修改    filename: 'js/[name].[chunkhash].js',
    clean: true
  },
plugins: [
      new MiniCssExtractPlugin({
      // 修改为 chunkhash
修改      filename: 'styles/[name].[chunkhash].css'
    })
]

此时我们运行npm run build看看,打包后的东西:

我们可以看出,hash值会根据入口文件的不同而分出两个阵营:

  • main.js、main.css一个阵营,都属于main.js入口文件
  • console.js一个阵营,属于console.js入口文件

那我们现在照样修改一下main.css:

.title {
  // 从 #fff 改为 pink
  color: pink;
}

重新运行npm run build打包看看:

可以看出,main.css修改后会影响main.css、main.js的hash值

结论:当规则为chunkhash时,打包后的hash值会根据入口文件的不用而不一样,当某个入口文件修改后重新打包,会导致本入口文件关联的所有文件的hash值都修改,但是不会影响到其他入口文件的hash值

contenthash

我们把输出文件名规则修改为contenthash:

entry: {
    main: './class="lazy" data-src/main.js',
    console: './class="lazy" data-src/console.js'
  },
output: {
    path: path.resolve(__dirname, './dist'),
    // 修改为 contenthash
修改    filename: 'js/[name].[contenthash].js',
    clean: true
  },
plugins: [
      new MiniCssExtractPlugin({
      // 修改为 contenthash
修改      filename: 'styles/[name].[contenthash].css'
    })
]

运行npm run build打包,看看打包后的文件长什么样子:

可以看到,每个文件的hash值都不一样,每个文件的hash值都是根据自身的内容去生成的,那我们现在修改一下main.css:

.title {
  // pink 修改为 blue
  color: blue;
}

重新打包看看:

可以看出,main.css修改后只会影响main.css得hash值,也就是自己的hash值

结论:当规则为contenthash时,每个文件的hash值都是根据自身内容而生成,当某个文件内容修改时,打包后只会修改其本身的hash值,不会影响其他文件的hash值

以上就是webpack打包的3种hash值详解的详细内容,更多关于webpack打包hash值的资料请关注编程网其它相关文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

webpack打包的3种hash值详解

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

uniapp打包安卓App的两种方式(云打包、本地打包)方法详解

这篇文章主要介绍了uniapp打包安卓App的两种方式(云打包、本地打包)方法详解,需要的朋友可以参考下
2022-12-23

详解java项目打包docker镜像的几种方式

本文主要介绍了详解java项目打包docker镜像的几种方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2023-01-15

编程热搜

目录