You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vite+Vue3项目配置加载本地字体报错无法生效该如何处理?

问题根因

你的配置逻辑本身没有语法错误,出现问题是Vite和Vue CLI(基于Webpack)对SCSS中相对路径的解析规则不一致导致的:
你通过additionalData全局注入main.scss到所有SCSS文件时,@font-face里写的./fonts/xxx.ttf相对路径,不会以main.scss所在的assets/styles/目录为基准解析,而是会以最终引用了这段样式的业务页面/组件的SCSS文件所在目录为基准解析,最终拼接出的路径错误,才会请求根路径下的/fonts/xxx.ttf导致404。

可行解决方案,任选一种即可:

方案1:修改字体路径为带别名的绝对路径

在SCSS的url()中使用别名时需要加~前缀标识,修改main.scss里的@font-face配置:

@font-face {
  font-family: 'Opensans-Bold';
  font-style: normal;
  src: local('Opensans-Bold'), url(~@/assets/styles/fonts/OpenSans-Bold.ttf) format('truetype');
}
@font-face {
  font-family: 'Opensans-Light';
  font-style: normal;
  src: local('Opensans-Light'), url(~@/assets/styles/fonts/OpenSans-Light.ttf) format('truetype');
}

方案2:迁移字体文件到public目录

将assets/styles/fonts整个文件夹移动到项目根目录的public文件夹下,Vite会自动将public下的资源映射到服务根路径,无需修改SCSS配置即可正常加载。

方案3:取消全局注入改为入口引入

删掉vite.config中css.preprocessorOptions.scss.additionalData的配置,在项目入口文件main.js/main.ts中直接引入全局样式:

import '@/assets/styles/main.scss'

这种引入方式下SCSS的相对路径会以main.scss本身所在目录为基准解析,和Vue CLI的行为一致。

内容的提问来源于stack exchange,提问作者Nikola Pavicevic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 06:15:04