webpack
的指纹策略是实现前端增量更新的方案之一。经过给文件加上hash
后缀,从而最大程度上使用缓存css
webpack
提供三种hash
生成方式:前端
hash
:和整个项目构建相关,只要一个文件有修改,整个项目的hash值就会改变chunkHash
:模块的hash,根据模块的修改才改变对应的hash值contentHash
:文章内容修改才会改变的hash值根据描述,咱们已经能够大概区分用法,chunkHash
能够用于js
打包,contentHash
能够用到css
文件打包。咱们实践一下。webpack
目录web
.
├── dist
├── package-lock.json
├── package.json
├── src
│ ├── page0.js
│ └── page1.js
└── webpack.config.js
复制代码
webpack.config.js
json
output: {
path: path.resolve(__dirname, 'dist'),
filename: '[name]_[hash:8].js'
},
复制代码
输出 缓存
page0.js
,再输出一次
能够发现,两个文件的hash值都改变。这在实际开发中确定是不知足咱们的需求的,那么chunkHash
这个时候就可上场了。sass
webpack.config.js
bash
output: {
path: path.resolve(__dirname, 'dist'),
filename: '[name]_[chunkhash:8].js'
},
复制代码
page0.js
page0.js
hash发生了变化,
page1
并无变化,那么意味着
page1.js
可使用缓存。
可是在这又延伸出来一个问题,若是个人文件内有css
内容呢?可不能够剥离?当js
修改的时候,不影响css
版本呢?固然是能够的,这就使用到contentHash
webpack-dev-server
咱们在page0.js
引入一个.scss
文件post
import './style.scss'
复制代码
咱们要作的的是剥离css
文件,并添加contentHash,这里须要借助一个插件mini-css-extract-plugin
,安装以后引入一下:
module: {
rules: [
{
test: /.scss$/,
use: [
MiniCssExtractPlugin.loader,
'css-loader',
'sass-loader'
]
},
],
},
plugins: [
new MiniCssExtractPlugin({
filename: '[name]_[contenthash:8].css'
}),
],
};
复制代码
打包看下
page1.js
,再编译一次
page0.js
文件的hash值修改了,并无影响
css
文件。
over。
webpack学习之路(五)loader初识及经常使用loader介绍
webpack学习之路(四)webpack-hot-middleware实现热更新
webpack学习之路(三)webpack-dev-middleware
webpack学习之路(二)webpack-dev-server实现热更新
I am moving forward.