next.js 默认不支持 less,必须手动配置;需安装 less、less-loader 和 @next-plugins/less,正确导出 next.config.js 对象,并在 layout.tsx 中导入全局 less 文件以确保 ssr 生效。

Next.js 默认不支持 Less,必须手动配置
Next.js 官方明确不内置 Less 支持 —— next build 过程中遇到 .less 文件会直接跳过编译,导致样式完全不产出,也不会报错,只在浏览器里表现为“样式丢失”。这不是路径或引入问题,而是构建链路根本没走通。
- 检查
dist目录下是否生成了任何.less对应的 CSS 文件(比如button.123abc.css),没有 → 说明 Less 根本没编译 - 运行
next build --debug,观察日志里是否有Compiling with less或类似提示;若无,证明 loader 未生效 - 确认项目根目录是否存在
next.config.js,且已正确导出配置对象(不是module.exports = () => {...}这种函数形式,Next.js 13+ 要求导出 plain object)
用 next-compose-plugins + less-loader 配置 Less 支持
Next.js 13+ 的 App Router 下,官方推荐通过 next.config.js 注入自定义 webpack rule。最稳妥的方式是使用 @next-plugins/less(注意不是旧版 next-less),它已适配 Webpack 5 和 SWC。
- 安装依赖:
npm install --save-dev @next-plugins/less less less-loader - 在
next.config.js中写入:const withLess = require('@next-plugins/less')({ /* 可选 lessOptions */ }); module.exports = withLess({ webpack: (config) => { return config; } }); - 确保
less-loader版本与 Webpack 兼容:Next.js 14+ 内置 Webpack 5,less-loader@11+才支持;less-loader@10会静默失败
App Router 中全局 Less 必须放在 layout.tsx 或 globals.css 同级位置
Next.js 的 App Router 对 CSS 加载顺序敏感。把 global.less 直接 import 到 layout.tsx 是唯一可靠方式;放在 page.tsx 或组件内部 import,会导致 SSR 时样式不注入,客户端 hydration 后才加载,出现闪烁或丢失。
- 错误写法:
import './Button.module.less'在组件文件里 → 样式仅作用于该组件,且 SSR 不生效 - 正确写法:在
app/layout.tsx顶部 import:import '../styles/global.less'; - 如果用了 CSS-in-JS 库(如 styled-components),再引入全局 Less,需注意 specificity 冲突 —— Less 规则可能被更高权重的内联样式覆盖,不是“丢失”,是“被压住”
Less 变量和 mixin 在 SSR 环境下无法动态计算
Less 的 @import、变量、.mixin() 在服务端编译时是静态解析的,但如果你在 getServerSideProps 或组件中动态拼接 class 名(如 className={`btn-${theme}`}),而对应 Less 里没预定义 .btn-dark 这类规则,就会漏样式 —— 这不是构建问题,是逻辑没对齐。
- 检查所有动态 class 是否都有对应 Less 规则;
btn-primary存在,btn-custom没定义 → 渲染后无样式 - 避免在 Less 里用 JS 表达式(如
@color: ${process.env.COLOR}),Less 编译器不识别环境变量,会报错或忽略整段 - Ant Design 等库的 Less 主题定制,必须通过
modifyVars传入,不能靠 runtime 替换 ——less-vars-to-js工具生成的 JSON 需提前注入到next.config.js的lessOptions
Less 支持本质是绕过 Next.js 默认 CSS pipeline 插入一条新链路,稍有错位就静默失效。最常被忽略的是:loader 版本兼容性、next.config.js 导出格式、以及 App Router 下全局样式的唯一合法挂载点 —— 这三处任一出错,都会让 Less 文件彻底“消失”在构建产物里。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











