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

Next.js生产构建与开发构建Montserrat字体显示不一致问题求助

你当前的字体引入方式存在顺序错误,这是生产构建失效的核心原因:

  • CSS规范要求@import规则必须放在所有其他样式规则之前才能生效。你把Google字体的引入语句放在了三条@tailwind指令之后,开发环境下CSS预处理器的宽松校验可以兼容这种写法,但是生产构建时会对样式做严格的压缩与规则校验,后置的@import会被直接忽略,导致Montserrat字体没有被加载,页面自动降级为默认的系统无衬线字体。

两种修复方案如下:

方案1:调整样式顺序(最快修复)

修改globals.scss的代码顺序,把字体引入放在最顶部:

@import url('https://fonts.googleapis.com/css2?family=Montserrat:wght@300;400;700&display=swap');

@tailwind base;
@tailwind components;
@tailwind utilities;

html,
body {
  padding: 0;
  margin: 0;
  font-family: 'Montserrat', sans-serif;
  background-color:  hsl(265, 3%, 53%);
  color: black;
  &:before{
    content:'';
    content: "";
    width: 100%;
    height: 100vh;
  }
}

方案2:使用Next.js内置字体方案(更稳定,推荐)

Next.js自带next/font能力,原生支持Google字体加载,不需要额外引入外部CSS,不会出现生产构建失效问题,还能避免字体闪烁、提升加载性能:

  1. 在根布局文件(App Router对应app/layout.js,Pages Router对应pages/_app.js)中引入字体:
import { Montserrat } from 'next/font/google'

const montserrat = Montserrat({
  weight: ['300', '400', '700'],
  subsets: ['latin'],
  display: 'swap',
})
  1. 将字体类绑定到根节点:
// App Router 写法示例
export default function RootLayout({ children }) {
  return (
    <html lang="en">
      <body className={montserrat.className}>{children}</body>
    </html>
  )
}
  1. 删掉globals.scss里的@import字体引入语句即可。

修改完成后重新执行npm run build+npm start即可验证字体生效。


效果参考:
生产构建
开发构建

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 01:15:04