Webpack干货系列 | Webpack5 怎么处理字体图标、图片资源
程序员优雅哥(youyacoder)简介:十年程序员,呆过央企外企私企,做过前端后端架构。分享vue、Java等前后端技术和架构。
本文摘要:主要讲解在不需要引入额外的loader的条件下运用Webpack 5 如何高效处理字体图标、图片资源的方法与步骤。
网页上需要使用到图片、字体图标等资源,有些网站还会使用到音频、视频等资源。在之前的webpack4版本,默认是不能处理图片资源的,需要额外配置loader(url-loader和file-loader)才能处理。在webpack 5中默认就可以支持对图片的处理,不需要引入额外的依赖。如果需要指定图片编码为base64、输出目录等,只需要简单的配置即可。
1 处理字体图标资源
粗俗的理解,字体图标就是给元素标签设置对应的class,就可以在页面上展示出图标来。本质上,字体图标也是一种字体。
1.1 添加字体图标文件
首先在阿里巴巴矢量图标库网站(Iconfont)上获取字体图标,具体步骤参考《在iconfont上获取图标资源》一文。通过该网站获取到的字体图标文件如下所示:

在浏览器中打开 demo_index.html,可以看到字体图标的使用:

1、将 iconfont.css 文件拷贝到 src/style/css目录下;
2、在src 目录下创建iconfont目录,并将 iconfont.css 中使用到的 iconfont.ttf文件拷贝到刚创建的 src/iconfont目录下;
3、修改 src/style/css/iconfont.css文件中对iconfont.ttf的引用路径:(第三行修改如下)
src: url('../../iconfont/iconfont.ttf?t=1654939069757') format('truetype');
4、在 main.js 文件中导入 iconfont.css
import './style/css/iconfont.css'
5、在 index.html 中使用字体图标
<span class="iconfont icon-mobile"></span>
<span class="iconfont icon-Notebook"></span>
<span class="iconfont icon-rili"></span>
1.2 使用webpack打包编译
yarn build
执行命令后,显示打包成功,说明 webpack5 默认便可以处理字体图标资源。在浏览器中访问 index.html,可以看到字体图标正常显示。

查看打包后的 dist 目录,会看到字体图标文件位于打包根路径下(dist目录中)。我们希望字体图标资源放在 dist/resources目录下。这就需要配置webpack了。
1.3 配置 webpack
在 webpack.config.js 中的 module.rules 中添加对字体图标文件的处理,指定输出文件名称:
module: {
rules: [
...
{
test: /\.ttf$/,
type: 'asset/resource',
generator: {
filename: 'resources/[hash:10][ext][query]'
}
}
]
},
generator 指定输出的规则。 filename 表示输出的文件相对路径及名称,此处配置表示.ttf格式的文件,打包后放在 dist/resources目录下,名字为 hash 值的前10位。
再次打包运行,会发现 dist 目录下多了一个 resources目录,并且字体图标 ttf 文件位于该目录中。
在浏览器中访问index.html,字体图标显示正常。
其实不仅是字体图标文件,其他的媒体资源文件,如avi、mp3等资源,都可以使用该配置。故该配置可以修改 test 属性,使其处理多种格式的媒体资源。
{
test: /\.(avi|mp3|ttf|woff2?)$/,
type: 'asset/resource',
generator: {
filename: 'resources/[hash:10][ext][query]'
}
}
2 处理图片资源
2.1 添加并使用图标文件
1、在src目录下创建目录img,拷贝图片到该目录中。我准备了三张图片,分别是png、jpeg、svg

2、在 src/style/css下创建文件 img-demo.css样式文件,在该样式文件中定义三个样式类,每个样式类使用一个图片作为背景:
.img1 {
width: 200px;
height: 100px;
background: url("../../img/img1.png");
background-size: 100% 100%;
}
.img2 {
width: 200px;
height: 100px;
background: url("../../img/img2.jpeg");
background-size: cover;
}
.img3 {
width: 100px;
height: 100px;
background: url("../../img/img3.svg");
background-size: cover;
}
3、在 src/main.js中引入该样式文件:
import './style/css/img-demo.css'
4、在 template/index.html中创建三个div,并设置对应的class:
<div class="img1"></div>
<div class="img2"></div>
<div class="img3"></div>
2.2 使用webpack编译打包
执行在第一节中配置的build命令:
yarn build
执行命令后,显示打包成功,说明 webpack5 默认便可以处理图片资源。在浏览器中访问 index.html,可以看到三个div背景图正常显示。

查看打包后的 dist 目录,看到三个图片文件都位于打包根路径下(dist目录中),这样显得比较杂乱,我们希望图片资源放在 dist/img目录下。这就需要配置webpack了。
2.3 配置 webpack
在 webpack.config.js 中的 module.rules 中添加对图片文件的处理,指定输出文件名称,并且在图片大小小于10kb时,将其转为base64放在js中(可以减少网络请求数):
{
test: /\.(png|jpe?g|gif|svg?)$/,
type: 'asset',
parser: {
dataUrlCondition: {
maxSize: 10 * 1024
}
},
generator: {
filename: 'img/[hash:10][ext][query]'
}
}
maxSize 就是指小于该大小的图片,就转为base64。这里要注意 type属性为 asset。上面处理字体图片等媒体资源时,type属性为asset/resource。asset和asset/resource的区别就是,后者只做拷贝,不能配置转base64。
重新执行打包命令,可以看到dist目录下只有一张图片,因为 img1 和 img3 都小于10kb,被转为base64了。在浏览器测试访问,显示正常。
总而言之,webpack 5 默认可以处理图片和字体图标等资源,不需要引入额外的loader,定制化打包只需要简单配置即可。
今日优雅哥(youyacoder)学习结束,期待关注留言分享~~
Webpack干货系列 | Webpack5 怎么处理字体图标、图片资源的更多相关文章
- Webpack干货系列 | 在 Webpack 5 集成 ESLint 的方法
程序员优雅哥(youyacoder)简介:十年程序员,呆过央企外企私企,做过前端后端架构.分享vue.Java等前后端技术和架构. 本文摘要:主要讲解运用Webpack 5 中集成 ESLint 的方 ...
- Webpack干货系列 | 怎么运用 Webpack 5 处理css/scss/sass、less、stylus样式资源
程序员优雅哥简介:十年程序员,呆过央企外企私企,做过前端后端架构.分享vue.Java等前后端技术和架构. 本文摘要:主要讲解webpack 5 如何高效处理CSS 资源.scss/sass 资源.l ...
- Webpack学习系列 - Webpack5 怎么集成Babel ?
程序员优雅哥简介:十年程序员,呆过央企外企私企,做过前端后端架构.分享vue.Java等前后端技术和架构. 本文摘要:主要通过实操讲解运用Webpack 5 如何集成 Babel Babel 对于前端 ...
- vue项目打包部署elementUI的字体图标丢失问题
自己搭建的Vue项目,没有使用vue-cli,引入elementUI时,使用的是webpack直接打包工具,发现字体图标丢失你 记录一下解决办法: webpack module配置:(build目录下 ...
- webpack热更新问题和antd design字体图标库扩展
标题也不知道怎么写好,真是尴尬.不过话说回来,距离上一次写文快两个月了,最近有点忙,一直在开发新项目, 今天刚刚闲下来,项目准备提测.借这个功夫写点东西,把新项目上学到的一些好的干活分享一下,以便之后 ...
- react+webpack 引入字体图标
在使用react+webpack 构建项目过程中免不了要用到字体图标,在引入过程中报错,不能识别字体图标文件中的@符,报错 Uncaught Error: Module parse failed: U ...
- webpack打包字体图标报错的解决办法
webpack打包字体图标需要两个加载器 url-loader 和 file-loader 另外 字体图标的引入方式 本来应该是 url("....") 这样的方式,但是w ...
- webpack打包绝对路径引用资源和element ui字体图标不显示的解决办法
webpack打包绝对路径引用资源解决办法: 打开webpack.prod.conf.js 找到output:增加 publicPath: './', 即可,如图 element ui字体图标不显 ...
- 绝对干货!!css3字体图标—丰富的阿里图标库iconfont的使用详解
在移动端Web项目开发中,我们往往需要用到一些小图标,比如搜索,返回,小菜单,小箭头等等..这如果还用切图你就OUT了.. 而这时CSS3提供的字体图标无疑是我们最好的选择,它就像字体一样,可以设置大 ...
随机推荐
- 实战 | Linux根分区扩容
一个执着于技术的公众号 一个执着于技术的公众号 前言 Linux系统作为服务器操作系统,经常遇到一个问题就是服务器分区磁盘空间不足需要扩容的情况.本文以linux系统最常见的发行版centos7系统为 ...
- Linux虚拟网络技术学习
一个执着于技术的公众号 地方 背景 在Linux虚拟化技术中,网络层面,通常重要的三个技术分别是Network Namespace.veth pair.以及网桥或虚拟交换机技术.今天就通过实验带大家一 ...
- 【mq】从零开始实现 mq-06-消费者心跳检测 heartbeat
前景回顾 [mq]从零开始实现 mq-01-生产者.消费者启动 [mq]从零开始实现 mq-02-如何实现生产者调用消费者? [mq]从零开始实现 mq-03-引入 broker 中间人 [mq]从零 ...
- kNN-画图
现在我们想要展示一些可视化内容 首先导包,如果是在jupyter notebook上,需要加入魔法函数:%matplotlib inline,这表示可以在jupyter上直接画图 import dat ...
- webpack与vite的对比
vite与webpack的打包原理: vite: 基于游览器原生ES Module,利用游览器解析import,服务器端按需编译返回 webpack: 逐级递归识别依赖,构建依赖图谱->转化AS ...
- linux篇-linux下ffmpeg安装
1最近自己搭建的公司服务端转化视频不可以,我想应该是ffmpeg的问题,头痛 准备这两个源码包 2安装,先解压 ffmpeg-4.1.4.tar.bz2 yasm-1.3.0.tar.gz 3先安装y ...
- Hadoop安装学习(第三天)
学习任务: 1.解压jdk和hadoop包 2.安装jdk 3.修改hadoop配置文件 4.hadoop格式化 5.hadoop启动 出现的问题:hadoop可以正常启动,但是端口9000丢失,导致 ...
- python基础与数据类型(int, float, str, list)
目录 python多版本共存 在cmd窗口进入不同版本的python环境 在pycharm中切换不同的版本 python语法之注释 python变量与常量 变量 变量的本质 变量的命名规范 常量 py ...
- 学习Linux须知1.2之Linux命令的实战
(一)学习Linux 的准备工作 1.在线学习linux 学习网站推荐:Linux 基础入门_Linux - 蓝桥云课 (lanqiao.cn) 2.连接远程服务器学习[下文的案例就是使用xshell ...
- Eureka服务下线太慢,电话被告警打爆了
某年某月的某一天,就像一张破碎的脸... 错了,重来. 某天,忽然发现大量的告警,经过多番调查研究考察(此处省略3000字),发现是由于 Eureka 服务下线太慢,而仍然有大量的请求打进来导致的报错 ...