chunkhash、contenthash、hash

Hash:和整个项目的构建相关,只要项目文件有修改,整个项目构建的 hash 值就会更改

Chunkhash:和 webpack 打包的 chunk 有关,不同的 entry 会生成不同的 chunkhash 值

Contenthash:根据文件内容来定义 hash,文件内容不变,则 contenthash 不变

JS 的文件指纹设置

  1. // webpack.config.js
  2. module.exports = {
  3. //...
  4. output: {
  5. path: path.join(__dirname, 'dist'),
  6. filename: '[name]_[chunkhash:8].js',
  7. },
  8. }

CSS 的文件指纹设置

  1. // webpack.config.js
  2. const MiniCssExtractPlugin = require('mini-css-extract-plugin')
  3. module.exports = {
  4. //...
  5. module: {
  6. rules: [
  7. {
  8. test: /\\.css$/,
  9. use: [
  10. MiniCssExtractPlugin.loader,
  11. 'css-loader'
  12. ]
  13. }
  14. ]
  15. },
  16. plugins: {
  17. new MiniCssExtractPlugin({
  18. filename: '[name]_[contenthash:8].css'
  19. }),
  20. },
  21. }

图片的文件指纹设置

  1. // webpack.config.js
  2. module.exports = {
  3. //...
  4. module: {
  5. rules: [
  6. {
  7. test: /.(png|jpg|gif|jpeg)$/,
  8. use: [
  9. {
  10. loader: 'file-loader',
  11. options: {
  12. name: '[name]_[hash:8].[ext]',
  13. },
  14. },
  15. ],
  16. },
  17. ]
  18. }
  19. }