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'
},
複製代碼
輸出 緩存
能夠看到打包出來以後是兩個文件的hash值同樣,而後我編輯一下page0.js
,再輸出一次
能夠發現,兩個文件的hash值都改變。這在實際開發中確定是不知足咱們的需求的,那麼chunkHash
這個時候就可上場了。sass
webpack.config.js
bash
output: {
path: path.resolve(__dirname, 'dist'),
filename: '[name]_[chunkhash:8].js'
},
複製代碼
打包以後能夠發現,兩個文件的hash值是不一樣的,如今咱們再來修改一下
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'
}),
],
};
複製代碼
打包看下
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.