什么是文件指纹?

打包后输入的文件名的后缀

文件指纹罕用于做文件版本的治理,我的项目公布的时候,有些文件批改了,只须要公布批改的文件,另外设置了文件指纹,对没有批改的文件能够应用本地的缓存,减速页面的拜访。

文件指纹如何生成?

Hash:和整个我的项目的构建相干,只有我的项目文件有批改,整个我的项目构建的hash值会批改。有一个文件发生变化,那么所有的文件都会从新构建。如果2个页面,批改了A页面的js,那么B页面的js也会发生变化。这其实是没有必要的。
ChunkHash:和webpack打包的chunk无关。不同的entry会生成不同的chunkhash值,如果A页面发生变化,那么只有从新构建A,不会从新构建B页面。
ContentHash:依据文件内容来定义hash,文件内容不变,则contenthash不变。如果咱们批改了js文件,没有批改css文件,如果应用chunkHash,那么css文件依然会变,所以应用ContentHash。

实际

Js的文件指纹设置
设置output的filename,应用[chunkhash]

module.exports = {  entry: {    app: './src/app.js',    search: './src/search.js'  },  output: {    filename: '[name][chunkhash:8].js',    path: __dirname + '/dist'  }}

css文件指纹设置
设置MiniCssExtractPlugin的filename,应用[contenthash]

咱们如果应用了style-loader和css-loader,css会由style-loader将css插入到style外面放入head头部,这时没有一个独立的css文件,因而这时应用一个MiniCssExtractPlugin将其提取成一个独立的文件。

module.exports = {  plugins: [    new MiniCssExtractPlugin({      filename: `[name][contenthash:8].css`    })  ]}

图片的文件指纹设置

设置file-loader的name,应用[hash]。

这里的hash和js里的hash是不太一样的,这里的hash也是指文件内容的hash,文件内容的hash是采纳md5生成的。

占位符名称含意
[ext]资源后缀名
[name]文件名称
[path]文件的相对路径
[folder]文件所在的文件夹
[contenthash]文件的内容hash,默认是md5生成
[hash]文件内容的hash,默认是md5生成
[emoji]一个随机的指代文件内容的emoji
module.exports = {  module: {    rules: [      {test: /\.(png|svg|jpg|gif)$/, use: [{        loader: 'file-loader',        options: {name: 'img_[name][hash:8].[ext]'}      }]}    ]  }}