程序员优雅哥(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/resourceassetasset/resource的区别就是,后者只做拷贝,不能配置转base64。

重新执行打包命令,可以看到dist目录下只有一张图片,因为 img1 和 img3 都小于10kb,被转为base64了。在浏览器测试访问,显示正常。

总而言之,webpack 5 默认可以处理图片和字体图标等资源,不需要引入额外的loader,定制化打包只需要简单配置即可。

今日优雅哥(youyacoder)学习结束,期待关注留言分享~~

Webpack干货系列 | Webpack5 怎么处理字体图标、图片资源的更多相关文章

  1. Webpack干货系列 | 在 Webpack 5 集成 ESLint 的方法

    程序员优雅哥(youyacoder)简介:十年程序员,呆过央企外企私企,做过前端后端架构.分享vue.Java等前后端技术和架构. 本文摘要:主要讲解运用Webpack 5 中集成 ESLint 的方 ...

  2. Webpack干货系列 | 怎么运用 Webpack 5 处理css/scss/sass、less、stylus样式资源

    程序员优雅哥简介:十年程序员,呆过央企外企私企,做过前端后端架构.分享vue.Java等前后端技术和架构. 本文摘要:主要讲解webpack 5 如何高效处理CSS 资源.scss/sass 资源.l ...

  3. Webpack学习系列 - Webpack5 怎么集成Babel ?

    程序员优雅哥简介:十年程序员,呆过央企外企私企,做过前端后端架构.分享vue.Java等前后端技术和架构. 本文摘要:主要通过实操讲解运用Webpack 5 如何集成 Babel Babel 对于前端 ...

  4. vue项目打包部署elementUI的字体图标丢失问题

    自己搭建的Vue项目,没有使用vue-cli,引入elementUI时,使用的是webpack直接打包工具,发现字体图标丢失你 记录一下解决办法: webpack module配置:(build目录下 ...

  5. webpack热更新问题和antd design字体图标库扩展

    标题也不知道怎么写好,真是尴尬.不过话说回来,距离上一次写文快两个月了,最近有点忙,一直在开发新项目, 今天刚刚闲下来,项目准备提测.借这个功夫写点东西,把新项目上学到的一些好的干活分享一下,以便之后 ...

  6. react+webpack 引入字体图标

    在使用react+webpack 构建项目过程中免不了要用到字体图标,在引入过程中报错,不能识别字体图标文件中的@符,报错 Uncaught Error: Module parse failed: U ...

  7. webpack打包字体图标报错的解决办法

    webpack打包字体图标需要两个加载器  url-loader 和 file-loader 另外  字体图标的引入方式  本来应该是  url("....") 这样的方式,但是w ...

  8. webpack打包绝对路径引用资源和element ui字体图标不显示的解决办法

    webpack打包绝对路径引用资源解决办法: 打开webpack.prod.conf.js 找到output:增加 publicPath: './',  即可,如图  element ui字体图标不显 ...

  9. 绝对干货!!css3字体图标—丰富的阿里图标库iconfont的使用详解

    在移动端Web项目开发中,我们往往需要用到一些小图标,比如搜索,返回,小菜单,小箭头等等..这如果还用切图你就OUT了.. 而这时CSS3提供的字体图标无疑是我们最好的选择,它就像字体一样,可以设置大 ...

随机推荐

  1. 华硕主板安装Ubuntu双系统无法启动解决办法

    问题描述: 在安装完Ubuntu后,开机后没有启动项可以选择,而是直接进入win10系统. 解决办法: 开机进入bios,选择 高级模式 (Advance model),进入 启动(boot)选项卡, ...

  2. Java多线程——实现

    "java多线程的实现--几乎都要和java.lang.Thread打交道" 方式一:继承于Thread类 1.创建一个继承于Thread类的子类 2.重写Thread类的run( ...

  3. 【HarmonyOS学习笔记】Slider组件实现图形可调旋转

    哈喽大家好我是厚脸皮的小威 之前刚刚用华为的IDE跑通"HELLO,WORLD" 趁热又想去试试看跑一下基于TS拓展API接口的Slider组件,去实现图片的放大和缩小 凭借着大学 ...

  4. zabbix的web界面访问失败问题排查

    现象:用curl访问显示拒绝链接,查看zabbix-server日志也无异常 1.检查防火墙,SElinux是否关闭 2.检查zabbix-server服务是否启动 3.检查80端口是否被占用,比方是 ...

  5. Golang:手撸一个支持六种级别的日志库

    Golang标准日志库提供的日志输出方法有Print.Fatal.Panic等,没有常见的Debug.Info.Error等日志级别,用起来不太顺手.这篇文章就来手撸一个自己的日志库,可以记录不同级别 ...

  6. 【ACM程序设计】动态规划 第二篇 LCS&LIS问题

    动态规划 P1439 [模板]最长公共子序列 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题目描述 给出 1,2,-,n 的两个排列 P1 和 P2 ,求它们的最长公共子序列. ...

  7. syc-day2

    第1题:mod注意负数. 第2题:dp 第3题:构造(奇偶性) 第4题:线段树

  8. Python搜索书名获取整本资源_笔趣阁

    前言 偶然一天把某项目文档传到手机上,用手机自带的阅读器方便随时拿出来查阅.看着我那好久没点开的阅读器,再看着书架上摆着几本不知道是多久之前导入的小说. 闭上眼,我仿佛看到那时候的自己.侧躺着缩在被窝 ...

  9. Docker安装Jenkins打包Maven项目为Docker镜像并运行【保姆级图文教学】

    一.前言 Jenkins作为CI.CD的先驱者,虽然现在的风头没有Gitlab强了,但是还是老当益壮,很多中小公司还是使用比较广泛的.最近小编经历了一次Jenkins发包,感觉还不错,所以自己学习了一 ...

  10. WinForms拖控件拖到天荒地老

    更新记录: 2022年4月15日:本文迁移自Panda666原博客,原发布时间:2021年4月18日. 2022年4月15日:更新自动生成Web CURD工具. 说明 Winforms的控件拖起来是真 ...