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

Next.js使用SCSS模块时自定义mixins不生效如何解决?

Next.js SCSS模块主题mixin不生效解决方案

核心原因排查&修复步骤

1. 修正配置项命名错误

Next.js新版依赖的sass-loader v10+ 已经废弃prependData配置项,替换为additionalData,这是绝大多数配置失效的原因。

2. 调整next.config.js sass配置

const path = require('path');

module.exports = {
  sassOptions: {
    // 配置样式文件查找路径,避免写长路径
    includePaths: [path.join(__dirname, 'src/styles')],
    // 全局注入mixin,as * 可省略命名空间直接调用
    additionalData: `@use 'mixins' as *;`
  }
};

如果需要保留命名空间写法,将as *改为as mixins即可。

3. 确认主题类已挂载到根节点

你的mixin生成的样式规则为.theme-xxx 模块类名,必须在应用根节点(比如_app.tsx的外层容器、body标签)添加对应主题类才能匹配到样式,示例:

// _app.tsx
import type { AppProps } from 'next/app'
import './globals.scss'

export default function App({ Component, pageProps }: AppProps) {
  // 可根据状态动态切换theme-light / theme-dark
  return <div className="theme-light">
    <Component {...pageProps} />
  </div>
}

4. 调整SCSS模块调用写法

配置as *后可直接调用mixin和方法:

// Content.module.scss
.content {
  &>.test {
    height: 200px;
    @include themed() {
      background: choose('primary-color');
    } 
  }
}

验证方法

编译项目后查看生成的CSS文件,若存在.theme-light .content_test_xxxx { background: #00f7ff; } 类似规则则说明mixin已生效,仅需确认主题类是否正确挂载即可。如果未生成对应规则,可先在SCSS模块顶部手动添加@use 'src/styles/mixins.scss' as *; 排查是否为全局注入配置问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 11:39:02