关键词:webpack hash 码的生成
Webpack 在打包过程中生成 hash 码主要用于缓存和版本管理。主要有三种类型的 hash 码:
-
hash:是和整个项目的构建相关,只要项目文件有修改,整个项目构建的 hash 值就会更改。这意味着任何一个文件的改动都会影响到整体的 hash 值。
-
chunkhash:与 webpack 打包的 chunk 有关,不同的 entry 会生成不同的 chunkhash 值。例如,如果你的配置生成了多个 chunk(例如使用了 code splitting),每个 chunk 的更新只会影响到它自身的 chunkhash。
-
contenthash:根据文件内容来定义 hash,内容不变,则 contenthash 不变。这在使用诸如 CSS 提取到单独文件的插件时特别有用,因此只有当文件的内容实际改变时,浏览器才会重新下载文件。
生成方式:
- hash 和 chunkhash 主要是通过某种 hash 算法(默认 MD5)来对文件名或者 chunk 数据进行编码。
- contenthash 是通过构建时的 webpack 插件(如 mini-css-extract-plugin)来处理的,它会对文件内容进行 hash。
Hash 码的生成可以被 webpack 配置的 hashFunction,hashDigest,hashDigestLength 等选项影响。例如,你可以选择不同的算法如 SHA256 或者 MD5,以及可以决定 hash 值的长度。
在 webpack 的配置文件中,可以通过如下方式设定 hash:
output: {
filename: '[name].[chunkhash].js',
path: __dirname + '/dist'
}
这会将输出的文件名设置为入口名称加上基于每个 chunk 内容的 hash。在使用 webpack-dev-server
或者 webpack --watch
时,不会生成实际的文件,所以这些 hash 值是在内存中计算并关联的。