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

sass-loader报'at-rule is not allowed'错误问题排查求助

问题修复方案

1. 修正css-loader的importLoaders参数

当前配置中css-loader的importLoaders设置为1不符合实际loader链结构,该参数代表css-loader处理@import资源前,需要调用的前置loader数量。
loader的执行顺序为从后往前:sass-loader -> resolve-url-loader -> css-loader -> style-loader,所以css-loader前共有2个前置loader,需要将参数调整为2,否则@import引入的scss文件不会被sass-loader处理,直接以css规则解析就会识别不了sass的@规则。
修改后的配置片段:

{
  loader: 'css-loader',
  options: {
    importLoaders: 2,
  },
}

2. 配置sass-loader路径解析规则

引入node_modules内的scss资源时,建议新增includePaths配置简化路径解析逻辑,避免相对路径层级错误导致的加载异常:

// 注意先引入node内置path模块
const path = require('path')

// sass-loader配置修改为
{
  loader: 'sass-loader',
  options: {
    implementation: require.resolve('sass'),
    sassOptions: {
      indentWidth: 4,
      includePaths: [path.resolve(__dirname, 'node_modules')]
    },
  },
}

3. 检查scss语法兼容性

dart-sass语法规则比旧版node-sass更严格,明确禁止在嵌套规则块内部使用@import。你可以打开报错指向的第64行对应的scss文件,检查该行@import是否被写在某个{}内部,如果是需要将@import移动到文件顶层,或者改用dart-sass推荐的@use模块化导入规则替换@import。

4. 排查全局注入配置问题

如果你配置了sass-loader的additionalData参数用来全局注入公共变量、样式文件,需要检查注入的代码末尾是否正确添加了分号,避免注入代码和业务代码拼接后,导致@import被错误嵌入规则块内。

5. 区分css module与普通scss配置

如果项目同时使用了css module和全局scss,需要分开配置loader规则,避免全局scss(尤其是node_modules内的第三方样式)被当成css module处理导致解析错误:

// 处理普通全局scss,排除.module.scss文件
{
  test: /\.s[ac]ss$/i,
  exclude: /\.module\.s[ac]ss$/i,
  use: [
    'style-loader',
    {
      loader: 'css-loader',
      options: {
        importLoaders: 2,
      }
    },
    'resolve-url-loader',
    'sass-loader'
  ]
},
// 处理css module的scss文件
{
  test: /\.module\.s[ac]ss$/i,
  use: [
    'style-loader',
    {
      loader: 'css-loader',
      options: {
        importLoaders: 2,
        modules: true
      }
    },
    'resolve-url-loader',
    'sass-loader'
  ]
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 05:24:04