hash、chunkhash和contenthash

简介: webpack 通用配置优化

webpack.config.js配置如下:

const path = require('path')
const HtmlWebpackPlugin = require('html-webpack-plugin')
const MiniCssExtractPlugin = require('mini-css-extract-plugin')

module.exports = {
  entry: {
    main: './src/index.js',
    vender: ['lodash']
  },
  mode: 'development',
  output: {
    path: path.resolve(__dirname, 'dist'),
    filename: '[name].[hash].js'
  },
  module: {
    rules: [
      { test: /\.css/, use: [MiniCssExtractPlugin.loader, 'css-loader'] }
    ]
  },
  plugins: [
    new HtmlWebpackPlugin({
      template: './public/template.html'
    }),
    new MiniCssExtractPlugin({
      filename: 'css/[name].[hash].css'
    })
  ]
}

hash

第一次我们尝试使用hash打包

在这里插入图片描述

生成的hash值是63f9504be8bb69da6b5c
然后我们再改动index.js把 console.log('1') 变成 console.log('2')

在这里插入图片描述
生成的hash值是7dcbf720332877689f08

使用hash存在的问题:我只改动main里面的代码,css代码没有变化不应该打包, 公共的JS代码vender没有变化也不应该打包。

chunkhash

第二次我们把webpack.config.js里面的hash换成chunkhash再试试

在这里插入图片描述
生成的hash值是6ddad8554b64e9367d10
然后我们再改动index.js把 console.log('1') 变成 console.log('2')

在这里插入图片描述
生成的hash值是52804c9231136d999383

优化了公共的JS代码vender不会打包了

使用hash存在的问题:我只改动main里面的代码,css代码没有变化不应该打包

contenthash

第三次我们把webpack.config.js里面的css部分配置chunkhash换成contenthash再试试,因为JS的问题解决了,只剩下CSS的问题。

在这里插入图片描述
生成的hash值是2ffc70412efa0447f65c
然后我们再改动index.js把 console.log('1') 变成 console.log('2')

在这里插入图片描述
我们只改动入口文件,所以只会打包入口文件main,其他文件都不会重新打包。
优化了CSS代码不会打包了

总结:最佳配置如下:

const path = require('path')
const HtmlWebpackPlugin = require('html-webpack-plugin')
const MiniCssExtractPlugin = require('mini-css-extract-plugin')

module.exports = {
  entry: {
    main: './src/index.js',
    vender: ['lodash']
  },
  mode: 'development',
  output: {
    path: path.resolve(__dirname, 'dist'),
    filename: '[name].[chunkhash].js'
  },
  module: {
    rules: [
      { test: /\.css/, use: [MiniCssExtractPlugin.loader, 'css-loader'] }
    ]
  },
  plugins: [
    new HtmlWebpackPlugin({
      template: './public/template.html'
    }),
    new MiniCssExtractPlugin({
      filename: 'css/[name].[contenthash].css'
    })
  ]
}
相关文章
|
移动开发 JavaScript 前端开发
ThreeJs简介
这篇文章介绍了Three.js的基础知识,包括其相对于WebGL的优势以及如何使用Three.js创建基本的3D场景。
589 1
|
8月前
|
人工智能
科技赋能妇产医疗,钉钉联合打造小红 AI 患者助理
复旦大学附属妇产科医院与钉钉共同打造的 AI 助理“小红”上线。“小红”孵化于钉钉智能化底座,通过学习复旦大学附属妇产科医院的 400 多篇科普知识,涵盖妇科疾病宣教、专业产科指导、女性健康保健等问题,能够为患者提供妇科疾病、产科指导、女性健康保健等知识的专业解答。
348 11
|
SQL 关系型数据库 MySQL
【MySQL进阶之路 | 基础篇】MySQL之聚合函数与应用
【MySQL进阶之路 | 基础篇】MySQL之聚合函数与应用
【MySQL进阶之路 | 基础篇】MySQL之聚合函数与应用
|
9月前
|
Cloud Native 云栖大会 调度
平行云荣膺"阿里云产品生态伙伴合作攻坚奖""2022云栖科技创新奖"
2022云栖大会在杭州成功举办,平行云作为阿里云重要合作伙伴受邀参会,并凭借“元域电音Club”精彩亮相。会上,平行云荣获“阿里云产品生态伙伴合作攻坚奖”和“2022云栖科技创新奖”两项大奖,彰显其在云化XR领域的卓越贡献与创新实力。平行云为阿里云XR平台提供算力调度、3D实时渲染等服务,助力元宇宙产业云化转型,推动多行业创新业务形态发展。
271 15
|
人工智能 前端开发 小程序
WordPress网站访问慢解决方案(超详细图文教程)
WordPress网站访问慢解决方案(超详细图文教程)
396 0
|
存储 消息中间件 Cloud Native
AutoMQ 生态集成 CubeFS
立方体文件系统(CubeFS)是一个云原生存储解决方案,现为CNCF孵化项目,支持S3、POSIX、HDFS等协议,提供多租户、多AZ部署和跨区域复制等功能,适用于大数据、AI、容器平台等场景。要部署AutoMQ集群,需先准备CubeFS集群,启用对象网关,创建用户并配置S3接口,然后创建Bucket。接着,下载AutoMQ二进制包,使用S3 URL生成器配置并启动集群,确保所有主机在同一网络并配置正确端口。启动时,先启动控制器,再启动Broker节点。注意,部署在私有数据中心时,需考虑SSD的可靠性,可能需要RAID配置。
271 4
|
存储 XML JSON
使用Protocol Buffers优化数据传输
使用Protocol Buffers优化数据传输
|
监控 Cloud Native 持续交付
云原生架构:构建弹性与高效的现代应用##
随着云计算技术的不断成熟,云原生架构逐渐成为企业技术转型的重要方向。本文将深入探讨云原生的核心概念、主要技术和典型应用场景,以及如何通过云原生架构实现高可用性、弹性扩展和快速迭代,助力企业在数字化转型中保持竞争优势。 ##
430 6
|
数据库
ArcGIS创建矢量要素并绘制其空间范围的方法
本文介绍在ArcGIS下属ArcMap软件中,新建点、线、面等矢量要素图层,并对新建图层的空间范围加以划定的方法~
983 1
ArcGIS创建矢量要素并绘制其空间范围的方法
|
移动开发 自然语言处理 JavaScript
移动端H5使用window.open跳转,IOS不生效解决
移动端H5使用window.open跳转,IOS不生效解决
1219 2