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

NextJS静态导出+Electron项目中字体引入失败问题求助

NextJS静态导出+Electron项目中字体引入失败问题求助

我之前在做Next.js静态导出配合Electron的项目时,也碰到过几乎一模一样的字体加载问题,给你几个可行的解决方案,你可以挨个试试:

首先分析下问题根源

你设置了output: "export"做静态导出,同时用assetPrefix: "./"来适配Electron的本地文件环境,但Webpack在编译CSS中的url()路径时,会以当前CSS文件的编译上下文去解析相对路径,这就导致它找不到你写的./fonts/...对应的实际文件位置,所以抛出了找不到模块的错误。


方案一:改用基于Public目录的绝对路径(最省心)

Next.js的public目录是专门放静态资源的,这里的文件可以直接用/开头的绝对路径引用,而且在静态导出时,配合你设置的assetPrefix: "./",Next.js会自动把这些绝对路径转换成相对路径,完美适配Electron本地环境。

修改你的global.css中的字体定义:

@font-face {
  font-family: 'Roboto Mono';
  src: url('/fonts/roboto-mono/RobotoMono-Regular.ttf') format('truetype');
  font-weight: 400;
  font-style: normal;
}

body {
  font-family: "Roboto Mono";
}

改完之后重新跑next build,应该就能正常编译了,Electron中也能正确加载字体。


方案二:手动配置Webpack规则,强制指定字体文件的输出路径

如果方案一没解决问题,你可以直接在next.config.ts中添加Webpack的自定义规则,明确告诉Webpack如何处理字体文件,确保它能正确找到并复制到输出目录:

修改你的next.config.ts:

import type { NextConfig } from "next";

const nextConfig: NextConfig = {
  output: "export",
  assetPrefix: "./",
  webpack: (config) => {
    // 给字体文件添加专门的处理规则
    config.module.rules.push({
      test: /\.(ttf|otf|eot|woff|woff2)$/,
      type: 'asset/resource',
      generator: {
        // 指定字体文件输出到out目录下的对应位置
        filename: 'fonts/roboto-mono/[name][ext]'
      }
    });
    return config;
  }
};

export default nextConfig;

配置完之后,CSS里的字体路径不管用绝对路径还是相对路径,Webpack都能正确解析并处理了。


方案三:检查基础的文件结构和拼写

有时候问题可能出在最基础的地方,你可以先确认:

  • public/fonts/roboto-mono/RobotoMono-Regular.ttf这个文件确实存在,没有被误删或者放错位置
  • 文件名的大小写完全正确(比如是不是写成了robotomono-regular.ttf?有些系统的文件系统是大小写敏感的)
  • 字体文件本身没有损坏(可以试着直接在本地打开字体文件验证)

我当时是用方案一解决的问题,你先从最简单的开始试,应该能快速搞定。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.08 12:09:36