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

在Next.js中为Material UI配置自托管字体遇阻

Next.js + Material UI 自托管字体配置解决方案

核心问题修正步骤

  • 移除多余的字体导入:public目录下的资源无需通过import引入,直接使用绝对路径即可。你代码里的import HelveticaNeue from "./public/fonts/HelveticaNeue.woff2"会触发加载器报错,直接删除这一行。
  • 补全主题代码语法:你的代码存在对象未闭合的语法错误,修正后完整代码如下:
import { createTheme } from '@mui/material/styles';

const theme = createTheme({
  typography: {
    fontFamily: 'HelveticaNeue, sans-serif', // 添加 fallback 字体提升兼容性
  },
  components: {
    MuiCssBaseline: {
      styleOverrides: `
        @font-face {
          font-family: 'HelveticaNeue';
          font-style: normal;
          font-display: swap;
          font-weight: normal;
          src: url(/fonts/HelveticaNeue.woff2) format('woff2');
          unicodeRange: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF;
        }
      `,
    },
  },
});
  • 全局应用主题与样式基线:在pages/_app.js(Next.js 12及以下)或app/layout.js(Next.js 13+)中全局注入主题和CssBaseline,确保字体样式全局生效:
// pages/_app.js 示例
import { ThemeProvider } from '@mui/material/styles';
import CssBaseline from '@mui/material/CssBaseline';
import theme from '../path/to/your/theme-file';

export default function MyApp({ Component, pageProps }) {
  return (
    <ThemeProvider theme={theme}>
      <CssBaseline />
      <Component {...pageProps} />
    </ThemeProvider>
  );
}
  • 加载器问题收尾:如果仍提示加载器错误,在next.config.js中添加字体资源规则(Next.js 13+ 无需此配置):
module.exports = {
  webpack(config) {
    config.module.rules.push({
      test: /\.(woff|woff2|eot|ttf|otf)$/i,
      type: 'asset/resource',
    });
    return config;
  },
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 15:11:00