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

如何在Next.js中同时使用styled-components与本地字体?

解决Next.js中styled-components与本地字体共存的问题

方案1:修复Babel配置(兼容Pages/ App Router)

确保你的Babel配置完全保留Next.js默认预设,同时仅添加styled-components插件,不要修改或移除next/babel——这是Next.js内置功能(包括字体优化)的核心依赖:

{
  "presets": ["next/babel"],
  "plugins": [["styled-components", { "ssr": true, "displayName": true }]]
}

方案2:改用Next.js编译器配置(推荐Next.js 12+)

新版本Next.js支持直接在next.config.js中配置styled-components,无需单独维护Babel配置文件,从根源避免与字体优化的冲突:

/** @type {import('next').NextConfig} */
const nextConfig = {
  compiler: {
    styledComponents: true,
  },
}

module.exports = nextConfig

验证本地字体配置正确性

确保字体导入和应用流程符合Next.js要求:

Pages Router 示例

// pages/_app.js
import localFont from 'next/font/local'

const customFont = localFont({
  src: '../fonts/CustomFont-Regular.woff2',
  variable: '--font-custom',
})

function MyApp({ Component, pageProps }) {
  return (
    <div className={customFont.variable}>
      <Component {...pageProps} />
    </div>
  )
}

export default MyApp

在styled-components中引用字体

import styled from 'styled-components'

const StyledParagraph = styled.p`
  font-family: var(--font-custom);
`

排查要点

  • 绝对不要删除next/babel预设,否则会丢失Next.js内置的字体优化等核心功能
  • 使用App Router时,务必在根布局app/layout.js中全局导入字体,避免重复加载
  • 遇到缓存问题时,先执行npx next clean再重新构建项目

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 09:15:59