type
Post
status
Published
date
Apr 22, 2026
slug
font
summary
基于中文网字计划对前端字体分包和按需导入
tags
前端
字体
category
技术分享
icon
password
 

前言

最近的网页开发需要使用很多字体文件,看着设计同学发来的百多兆的字体文件陷入了沉思,于是研究了一下怎么压缩网页字体。
notion image
在网上查了几篇技术博客之后,了解到关于前端字体文件的几种优化方案,在上方参考文章中都有介绍,在此就不一一说明了,此处只记录次优选,即根据 中文网字计划 对字体包按字频进行分包,然后按需引入的方案。最优选方案是只打包网页中需要使用的文本的字体包,不采用此极致压缩的方案是因为不适合此项目,因为该项目没有确定的文本内容(例如用户昵称)。
 

方法一:手动对字体分包(适合少量字体的项目)

当项目所需字体文件较少,且不想引入额外插件和配置时,方案一足够简单有效,但缺点是在开发阶段项目内就会存在大量被分包的字体文件,看着有点乱。
步骤如下:
1、在线分包
将字体上传到在线工具网站,在线分包,然后下载解压,导入项目中
notion image
2、在项目导入字体
解压后的文件中有大量 .woff2 格式的小字体文件和一个 result.css 导入文件,其余文件可删除。将字体文件存入 assets/fonts/UranusPixel 目录,在项目中导入并使用,如下所示:
 
注意:
(1).字体的 fontFamliy 名称必须使用在线工具中解析出的字体名称,当然,你也可以在导入后自定义命名。
notion image
(2).如果你将字体文件存入 public 目录,可能在打包项目时出现两份字体文件:一份来自打包时开发框架对引入字体文件的压缩,会在 assets 中存储开发框架打包的字体;另一份来自开发框架对 public 文件夹下的字体文件的复制。如果你必须使用 public 存储字体文件,且你打包后出现重复字体文件,那么打包后就要删除多余的那份字体文件——也就是开发框架从 public 里复制的那份。
 

方法二:使用插件 vite-plugin-font 自动切分(适合字体文件较多的项目)

当项目内需要导入的字体较多,且后续还可能导入其他字体,而你不想每次都手动分包再导入时,可采用此方案。但缺点是初次配置较为麻烦。
以下教程基于 Vite + Vue3 项目(且仅演示一次性导入全部字体的方案),该插件也支持其他主流前端开发框架,以及其他精细控制和高级使用方案,详情请参考官方说明文档:
README_zh.md
KonghaYao
步骤如下:
1、安装依赖
 
2、导入插件
 
3、在项目导入字体
创建 fonts.ts 文件,导入需要压缩的的字体,并导出,示例如下:
 
在项目的 main.ts 中导入 fonts.ts 文件,虽然是全局导入,但只在页面使用到该字体时才会加载。
此时,在开发过程中,插件就会自动对字体进行分包并缓存,打包时再创建真正的分包字体文件,如果你的字体文件存放在 public 文件夹,需要如方案一的注意事项一样,打包后删除多余字体文件,此处不再赘述。
 
4、使用字体
在项目的CSS文件中使用字体:
注意:
(1).在上方的演示中 Source Han Sans SC VF可变字体,字重范围为250-900,因此可以指定字体族名和字重;但 Chill Round Gothic 因为没有可变字体,是单独导入不同字重的静态字体,因此,在使用时需要注意族名不能用错。
可变字体的族名统一,而静态字体的族名后常常跟字重字样,如 Chill Round Gothic + Bold ,如果不确定字体族名和字重大小,可参考上方方案一的步骤,在 在线字体分包器 中查看。
(2).此插件还有更多精细控制的使用方法,此处不再赘述,详情请参考上方的 vite-plugin-font 官方文档。
 
Socket.io笔记(踩坑指南)部署Ollama本地大模型教程
Loading...