如何在Vue或React项目中使用自定义字体,以及字体打包

如何在Vue或React项目中使用自定义字体,以及字体打包,第1张

总结一下就是:用户借助该规则,可以为引入的字体包命一个名字,并指定在哪里可以找到它(指定字体包的存储路径)后,就可以像使用通用字体那样去使用它了。

例如现在的需求是:需要在项目中使用 KlavikaMedium-Italic 字体。

则只需以下三个步骤即可。

这里放到根目录下的 tool/fonts 文件夹里。

新建一个index.vue文件,引入样式:

效果如下:

既然在本地开发环境实现了效果,于是就使用 webpack 打包准备上线,却发现 webpack 在打包过程中报错:

我们在定义自定义字体时使用URL指定了字体包的路径,由于 webpack 默认是无法处理 css 中的 url 地址的,因此这里会报错。

这时就需要借助 loader 来大显身手了,解决这个问题需要使用 file-loader ,它主要干了两件事儿:

在 webpack.config.js 中,配置file-loader:

再次执行打包命令,不再报错。

于是将打包出来的 dist 目录重新部署到服务器上后访问页面,却发现由于找不到字体导致没有生效:

从图中可以看出,http请求字体包的路径为: 根目录下(打包出来的静态文件index.html所在目录)的 css/620db1b997cd78cd373003282ee4453f.otf

看了一下打包命令生成的 dist 目录结构:

却发现,字体包和 index.html 是在同一级。因此字体无法生效的原因就很明朗了:

可以通过修改字体包打包后的实际存储路径去解决这个问题,在 webpack.config.js 中,借助 options 参数可以继续给 file-loader 设置更多的配置项:

再次打包,生成的 dist 目录结构如下:

可以看到字体包正如配置时预期的那样存储在 **css/fonts **目录下面。

重新部署项目,再次查看:

这一次 http 请求的字体包路径与实际的存放路径一致,因此自定义字体生效。

可以通过下面这个梳理流程图看的更清楚一些:

为什么本地开发的时候可以看到字体,部署到服务器后却看不到了呢?

原本项目执行构建命令,字体包能正确输出到指定位置,但是随着打包的文件增加,发现 dist/fonts 文件夹内字体包丢失了

使用 vue inspect 检查配置,结果:

猜测是 limit 过小导致的,在 vue.config.js 修改配置

执行构建,字体包正确输出~

编辑 iconfont.css 文件,修改 font-family 字体名称,如 xx-iconfont ,避免与默认的字体库发生冲突,

然后在 assets/css 目录下新建 icon.css 文件 ,

上面 el-icon-xx 中的 xx 为你自定义的名称

最后,就可以在项目中使用自定义的字体文件了。

这个可能是字体文件名称跟原来冲突导致的,假如我们没有使用自定义的名称 xx-iconfont , 而是默认的 iconfont ,那么就可能会出现 icon 不能正确显示的问题。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/11595586.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存