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

执行npm run dev编译SCSS时遇Webpack解析错误:Unexpected character '@'

解决webpack编译SCSS时的Unexpected character '@'错误

嘿,我仔细看了你的报错信息和配置文件,这个Unexpected character '@'的问题其实是webpack没法正确解析SCSS里的@import语句,根源出在你的webpack配置里的两个小疏漏:

问题1:SCSS文件的匹配路径写错了

看你的webpack.config.js里,处理.scss的规则中,include指向的是src/sass目录,但你的SCSS文件明明放在src/scss目录下!这就导致webpack的sass-loader根本没匹配到你的main.scss文件,自然没法识别@import语法。

问题2:Style-loader和MiniCssExtractPlugin.loader冲突

这两个loader不能同时使用:

  • style-loader是把编译后的CSS注入到页面的<style>标签里,适合开发环境快速调试
  • MiniCssExtractPlugin.loader是把CSS提取成单独的文件,适合生产环境优化加载
    同时使用会导致loader逻辑混乱,也会干扰SCSS的正常解析。

修复方案

步骤1:修正SCSS文件的匹配路径

把include的路径改成正确的src/scss,或者直接删掉include(让webpack匹配所有符合.scss规则的文件):

{
  test: /\.scss$/,
  // 修正路径,或者直接去掉这行include
  include: [path.resolve(__dirname, 'src', 'scss')],
  // ...其他配置
}

步骤2:区分开发/生产环境的loader配置

我们可以通过webpack的mode环境变量来动态选择loader,避免冲突:
修改webpack.config.js里的scss规则:

{
  test: /\.scss$/,
  include: [path.resolve(__dirname, 'src', 'scss')],
  use: [
    // 开发环境用style-loader,生产环境用MiniCssExtractPlugin.loader
    process.env.NODE_ENV === 'production' ? MiniCssExtractPlugin.loader : 'style-loader',
    'css-loader',
    'postcss-loader',
    'sass-loader'
  ]
}

完整修改后的webpack.config.js

const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const WebpackMd5Hash = require('webpack-md5-hash');
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
const CleanWebpackPlugin = require('clean-webpack-plugin');

module.exports = {
  entry: { main: './src/index.js' },
  output: {
    path: path.resolve(__dirname, 'dist'),
    filename: '[name].[chunkhash].js'
  },
  module: {
    rules: [
      {
        test: /\.js$/,
        exclude: /node_modules/,
        use: { loader: "babel-loader" }
      },
      {
        test: /\.scss$/,
        include: [path.resolve(__dirname, 'src', 'scss')],
        use: [
          process.env.NODE_ENV === 'production' ? MiniCssExtractPlugin.loader : 'style-loader',
          'css-loader',
          'postcss-loader',
          'sass-loader'
        ]
      }
    ]
  },
  plugins: [
    new CleanWebpackPlugin('dist', {}),
    new MiniCssExtractPlugin({ filename: 'style.[contenthash].css' }),
    new HtmlWebpackPlugin({
      inject: false,
      hash: true,
      template: './src/index.html',
      filename: 'index.html'
    }),
    new WebpackMd5Hash()
  ]
};

额外小提示

如果后续项目复杂度提升,你可以把webpack配置拆分成webpack.dev.js和webpack.prod.js,分别管理开发和生产环境的配置,会更清晰。

现在重新运行npm run dev,应该就能正常编译SCSS文件了!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:36:48