前言:笔者把学习的webpack知识从基础到原理写个系列,以便回顾。希望能帮助到更多正在学习webpack的小伙伴。
本篇文章讲述下热更新,文件指纹,压缩知识。
webpack中的文件监听
"scripts": {
"build": "webpack",
"watch": "webpack --watch"
},
2.在配置webpack.config.js中配置watch:true。
// webpack.config.js
module.exports = {
// 默认false,就是不开启
watch: true,
// 只有开启监听模式,watchOptions才有意义
watchOptions:{
// 默认为空,不监听的文件或者文件夹,支持正则匹配
ignored: /node_modules/,
// 监听到变化发生后会等300ms再去执行,默认300ms
aggregateTimeout:300,
// 判断文件是否发生变化是通过不停询问系统指定文件有么有变化实现,默认1000ms
poll:1000
}
}
webpack-dev-server热更新
npm i webpack-dev-server -D
2.在package.json中配置npm scripts
"scripts": {
"dev": "webpack-dev-server --open" // --open是自动打开浏览器
},
3.在webpack.config.js中配置webpack-dev-server的plugin
const webpack = require('webpack');
module.exports = {
// 以上省略
plugins:[
new webpack.HotModuleReplacementPlugin()
],
devServer:{
contentBase:'./dist',
hot: true
}
}
4.运行:npm run dev。自动打开浏览器。
5.修改代码,保存,浏览器自动刷新。
热更新原理分析
从右图看,分两步,一步是启动阶段,第二步是热更新阶段
文件指纹
js的文件指纹设置
// webpack.config.js
module.exports = {
entry:{
app:'./src/app.js',
search:'./src/search.js',
},
output:{
path:__dirname+"/dist",
filename:'[name][chunkhash:8].js'
}
}
css的文件指纹设置
npm i mini-css-extract-plugin -D
// webpack.config.js
module.exports = {
entry:{
app:'./src/app.js',
search:'./src/search.js',
},
output:{
path:__dirname+"/dist",
filename:'[name][chunkhash:8].js'
},
module:{
rules:[{
test:/\.css/,
use:[
MiniCssExtractPlugin.loader,
'css-loader'
]
}]
},
plugins:[
new MiniCssExtractPlugin({
filename:'[name][contenthash:8].css'
})
]
}
设置图片的文件指纹设置
// webpack.config.js
module.exports = {
entry:{
app:'./src/app.js',
search:'./src/search.js',
},
output:{
path:__dirname+"/dist",
filename:'[name][chunkhash:8].js'
},
module:{
rules:[{
test:/\.(png|jpg|jpeg|gif)$/,
use:[{
loader:'file-loader',
options:{
name:'img/[name][hash:8].[ext]'
}
}]
}]
}
}
bundle,chunk和module
代码压缩
js压缩
css文件压缩
npm i optimize-css-assets-webpack-plugin cssnano -D
使用
// webpack.config.js
module.exports = {
entry:{
app:'./src/app.js',
search:'./src/search.js',
},
output:{
path:__dirname+"/dist",
filename:'[name][chunkhash:8].js'
},
plugins:[
new OptimizeCSSAssetsPlugin({
assetNameRegExp:/\.css$/g,
cssProcessor:require('cssnano')
})
]
}
html文件压缩
npm i html-webpack-plugin -D
使用
// webpack.config.js
module.exports = {
entry:{
app:'./src/app.js',
search:'./src/search.js',
},
output:{
path:__dirname+"/dist",
filename:'[name][chunkhash:8].js'
},
plugins:[
new HtmlWebpackPlugin({
template:path.join(__dirname,'src/search.html'),
filename:'search.html',
chunks:['search'],
inject:true,
minify:{
html5:true,
collapseWhitespace:true,
preserveLineBreaks:false,
minifyCss:true,
minifyJs:true,
removeComments:false
}
})
]
}