文章简要:
1、图片处理 和 Base64编码
2、图片压缩
3、合成雪碧图
4、处理字体
图片处理
安装url-loader
cnpm i url-loader --save-dev //url-loader包含了file-loader
配置loader
{
test: /\.(png|jpg|jpeg|gif|svg)$/,
use: [{
loader: "url-loader",
options: {
limit: 5000, //小于该值的图片会使用base64编码,5000/1024k大约5kb
name: '[name].[hash:8].[ext]', //打包后的图片名称 [ext]指图片格式
outputPath: "static/img/"//这个是图片输出地址,图片路径不对时候需要注意
}
}]
}
图片压缩
首先安装需要的loader(img-loader),需要压缩哪些图片格式还需要要安装对应的loader,这里统一安装全部(基本是)
npm install img-loader imagemin-gifsicle imagemin-mozjpeg imagemin-pngquant imagemin-svgo imagemin --save-dev
配置loader
{
test: /\.(png|jpg|jpeg|gif|svg)$/,
use: [{
loader: "url-loader",
options: {
limit: 5000, //小于该值的图片会使用base64编码,5000/1024k大约5kb
name: '[name].[hash:8].[ext]', //打包后的图片名称 [ext]指图片格式
outputPath: "static/img/"//这个是图片输出地址,图片路径不对时候需要注意
}
},{
loader: 'img-loader',
options: {
plugins: [
require('imagemin-mozjpeg')({//这个是处理图片的格式jpeg,需要处理哪些格式都需要在此配置,
quality: "80" // 压缩质量,这个是压缩图片80%
}),
require('imagemin-pngquant')({
floyd: 0.5,
speed: 2
})
]
}
}
}]
}
处理字体
{
test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,
use: [
{
loader: "url-loader",
options: {
name: '[name].[hash:8].[ext]',
limit: 5000, // fonts file size <= 5KB, use 'base64'; else, output svg file
outputPath: "static/fonts/" //文字输出路径
}
}
]
}
处理字体跟处理图片用的都是url-loader,所以有时候放在一起配置也是可以的。
雪碧图处理
有2种方法,这里我们用postcss-loader的插件postcss-sprites,首先安装
cnpm i postcss-sprites --save-dev
配置loader
{
loader: "postcss-loader",
options: {
ident: "postcss",
plugins: [require("postcss-sprites")({
spritePath: "./dist/static/img",
})]
}
}
打包就可以看到效果。这样做其实还有很多问题,怎么引用?怎么设置样式呢?
推荐一篇文章,讲的很详细:
http://www.yvonne.party/2019/07/07/webpack-sprites/
本文关于css的处理是提取css到一个文件,打包到dist/static/css文件夹下
打包后的目录如下:

顺带说下处理css的loader配置如下:(为了说明路径)
{
test:/\.(sa|sc|c)ss$/,
use: [
{
loader: MiniCssExtractPlugin.loader,//MiniCssExtractPlugin.loader
options: {
publicPath: '../../', //这个地方要注意
}
},
{
loader: "css-loader" // 将 CSS 转化成 CommonJS 模块
},
{
loader: "sass-loader" // 将 Sass 编译成 CSS
},
{
loader: "postcss-loader" // 将 Sass 编译成 CSS
}
]
}
需要注意的是 css的输出路径publicPath: '../../',这个路径一定要配置正确,关系到图片和字体的引用路径。
看上图打包后的目录图片,我css打包后在static/css/文件夹下,所以我这里publicPath: '../../'
网友评论