什么是文件指纹?文件指纹就是打包后输出文件的后缀,每次文件更改打包后,后缀都会修改,这样能够防止浏览器的默认缓存,使客户端代码能够及时修改。css
文件指纹的三种方式:Hash:和整个项⽬目的构建相关,只要项⽬目⽂文件有修改,整个项⽬目构建的 hash 值就会更更改;Chunkhash:和 webpack 打包的 chunk 有关,不不同的 entry 会⽣生成不不同的 chunkhash 值;Contenthash:根据⽂文件内容来定义 hash ,⽂文件内容不不变,则 contenthash 不不变。html
1,设置js的文件指纹:修改webpack
的output
设置html5
module.exports = {
output:{
filename:'[name]_[chunkhash:8].js',
path:path.join(__dirname,'dist')
}
}
复制代码
2,设置css的文件指纹:使用MiniCssExtractPlugin
插件,首先安装npm install mini-css-extract-plugin -D
,而后修改webpack
配置。webpack
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
module.exports = {
...
module:{
rules:[
{
test:/\.css$/,
use:[
MiniCssExtractPlugin.loader,
'css-loader',
]
}
]
},
plugins:[
new MiniCssExtractPlugin({
filename:'[name]_[contenthash:8].css'
})
]
}
复制代码
3,图片的文件指纹:ios
[name]
:文件名称,[ext]
:文件后缀名,[path]
:文件相对路径,[hash]
:文件内容的hash
web
修改相应的webpack
配置:npm
module.exports = {
...
module:{
rules:[
{
test:/\.(png|jpg|svg|gif|jpeg)$/,
use:{
loader:'url-loader',
options:{
name:'img/[name]_[hash:8].[ext]',
limit:10240
}
}
}
]
}
}
复制代码
至此webpack
打包文件指纹设置完成。浏览器
1,js压缩:webpack
内置了uglifyjs-webpack-plugin
插件,只有设置mode:production
时,webpack
自动打开该功能,自动压缩js文件代码。缓存
2,css文件压缩:使用optimize-css-assets-webpack-plugin
插件,同时使用cssnano
插件,对css进行压缩。bash
首先安装插件:npm install optimize-css-assets-webpack-plugin cssnano -D
。
而后修改webpack配置
const OptimizeCssAssetsWebpackPlugin = require('optimize-css-assets-webpack-plugin');
module.exports = {
...
plugins:[
new OptimizeCssAssetsWebpackPlugin({
assetNameRegExp:/\.css$/g,
cssProcessor:require('cssnano')
})
]
}
复制代码
3,html文件压缩:修改html-webpack-plugin
插件配置,设置压缩参数
const HtmlWebpackPlugin = require('html-webpack-plugin');
module.exports = {
...
plugins:[
new HtmlWebpackPlugin({
template:path.join(__dirname,'src/index.html'),
filename:'index.html',
injuct:true,
minify:{
html5:true,
collapseWhitespace:true,
preserveLineBreaks:false,
minifyCSS:true,
minifyJS:true,
removeComments:false
}
})
]
}
复制代码
webpack
每次构建的时候不会自动清理目录,形成构建的输出目录 output 文件愈来愈多,避免构建前每次都手动删除dist文件夹。
使用clean-webpack-plugin
插件,默认会删除output指定的输出目录:npm install clean-webpack-plugin -D
。 修改webpack
配置
const { CleanWebpackPlugin } = require(clean-webpack-plugin);
module.exports = {
...
plugins:[
new CleanWebpackPlugin()
]
}
复制代码
使用postcss-loader
结合autoprefixer
插件实现自动补齐css前缀。
安装插件:npm install postcss-loader autoprefixer -D
;
修改webpack
配置:
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
module.exports = {
...
module:{
rules:[
{
test:/\.css$/,
use:[
MiniCssExtractPlugin.loader,
'css-loader',
{
loader:'postcss-loader',
options:{
plugins:() => [
require('autoprefixer')({
browsers:['last 2 version', '>1%', 'ios 7']
})
]
}
}
]
}
]
}
}
复制代码
移动端布局时,使用px2rem-loader
将px自动转化为rem,使页面根据屏幕的大小实现自适应。
安装loader:npm install px2rem-loader -D
;
修改webpack
配置:
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
module.exports = {
module:{
rules:[
{
test:/\.css$/,
use:[
MiniCssExtractPlugin.loader,
'css-loader',
{
loader:'postcss-loader',
options:{
plugins:() => [
require('autoprefixer')({
browsers:['last 2 version', '>1%' , 'ios 7']
})
]
}
},
{
loader:'px2rem-loader',
options:{
remUnit:75, //1rem等于多少px
remPrecision:8 //保留几位小数
}
}
]
}
]
}
}
复制代码