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

Vite+Vue3构建后font-face字体路径错误求助

解决Vite构建Vue应用时字体路径指向错误的问题

问题根源

构建后生成的main.css中,字体文件的引用路径是网站根目录绝对路径(如/shared/fonts/test.eot),但实际字体文件被打包到了指定的my-build-dir-path目录下,导致浏览器无法定位到字体资源。


解决方案

1. 配置Vite的相对路径基础(base)

在vite.config.ts的build配置中添加base: './',让所有资源路径变为相对当前HTML文件的路径,适配构建目录的部署位置:

export default ({ mode }: { mode: string }): UserConfig => {
  process.env = { ...process.env, ...loadEnv(mode, process.cwd()) };

  return defineConfig({
    plugins: [vue({})],
    build: {
      target: 'esnext',
      manifest: true,
      outDir: './my-build-dir-path',
      base: './', // 新增相对路径基础配置
      rollupOptions: {
        // 原有rollup配置...
      }
    },
    // 原有resolve配置...
  });
};

2. 修正@shared别名的路径

将@shared的别名从绝对根路径/shared改为项目根相对路径./shared,确保Vite能正确解析并打包字体文件:

resolve: {
  alias: {
    '@shared': './shared', // 修改为相对路径
    '@': '/src'
  }
}

3. (可选)统一字体文件输出位置

如果希望字体文件集中输出到构建目录的fonts子文件夹,可以调整Rollup的assetFileNames配置,单独处理字体资源:

rollupOptions: {
  input: `./src/main.ts`,
  output: {
    entryFileNames: '[name].js',
    chunkFileNames: '[name]-[hash].js',
    assetFileNames: (assetInfo) => {
      // 匹配字体文件后缀,输出到fonts目录
      const fontExts = ['.eot', '.woff2', '.woff', '.ttf'];
      if (assetInfo.name && fontExts.some(ext => assetInfo.name.endsWith(ext))) {
        return 'fonts/[name].[ext]';
      }
      return '[name].[ext]';
    },
    globals: {
      vue: 'Vue'
    }
  }
}

验证效果

执行vite build后,检查my-build-dir-path目录:

  • 字体文件会被正确复制到指定位置(如my-build-dir-path/fonts/)
  • main.css中的字体引用路径会变为相对路径(如./fonts/test.eot),浏览器可正常加载字体资源

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 13:17:07