javascript - Webpack 未构建,因为 CssSyntaxError

标签 javascript css webpack css-loader

我正在尝试运行构建的 webpack-dev-server,但每次都失败并出现以下错误:

ERROR in ./src/style.css (./node_modules/css-loader/dist/cjs.js!./node_modules/style-loader/dist/cjs.js!./node_modules/css-loader/dist/cjs.js!./src/style.css)
Module build failed (from ./node_modules/css-loader/dist/cjs.js):
CssSyntaxError

(1:1) Unknown word

> 1 | var api = require("!../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js");
    | ^
  2 |             var content = require("!!../node_modules/css-loader/dist/cjs.js!./style.css");
  3 | 
我的 webpack.dev.js 看起来像这样:
const path = require('path');
const { merge } = require('webpack-merge');
const common = require('./webpack.common.js');

module.exports = merge(common, {
    entry: './src/index.js',
    mode: 'development',
    devtool: 'inline-source-map',
    optimization: {
        usedExports: true,
    },
    output: {
        filename: 'bundle.js',
        path: path.resolve(__dirname, 'dist'),
    },
    module: {
        rules: [
            {
                test: /\.css$/,
                use: [
                    'style-loader',
                    'css-loader',
                ],
            },
            {
                test: /\.(png|svg|jpg|gif)$/,
                use: [
                    'file-loader',
                ],
            },
            {
                test: /\.m?js$/,
                exclude: /(node_modules|bower_components)/,
                use: {
                    loader: 'babel-loader',
                    options: {
                        presets: ['@babel/preset-env']
                    }
                }
            },
        ],
    },
});
在我的 index.js 中使用它时出现错误:
import './style.css';
许多解决方案建议样式加载器和 css-loader 的顺序,但据我所知,它的顺序正确。我究竟做错了什么?

最佳答案

我在尝试使用 style-loader 时遇到了同样的错误和 MiniCssExtractPlugin同时。您的示例使用 webpack 合并,所以我假设您在某个地方也有一个带有附加 CSS 规则的 webpack.common.js?
就我而言,解决的方法如下:
我的 webpack.dev.config.js 中有以下规则:

module: {
    rules: [
      {
        test: /\.(sass|scss)$/,
        use: [
          "style-loader",
          "css-loader",
          "postcss-loader",
          {
            loader: "sass-loader",
            options: {
              // Prefer `dart-sass`
              implementation: require("sass"),
            },
          },
        ],
      },
    ],
  },
在我的 webpack.prod.config.js 中有以下内容:
module: {
    rules: [
      {
        test: /\.(sass|scss)$/,
        use: [
          MiniCssExtractPlugin.loader,
          "css-loader",
          "postcss-loader",
          {
            loader: "sass-loader",
            options: {
              // Prefer `dart-sass`
              implementation: require("sass"),
            },
          },
        ],
      },
    ],
  },
您也可以使用三元运算符来检查 mode === 'production'并将其保留在一个文件中,但我更喜欢有两个单独的文件以使其更具可读性,以防 webpack 配置变得太大。
我还尝试移动 css-loader , postcss-loadersass-loader到同一个 webpack.common.js 文件,但由于某种原因它不起作用。
不确定这是否可能是您的错误的原因,但它在我的用例中修复了它,所以现在我将样式加载器用于我的开发环境并使用插件编译生产。
这适用于 webpack 5 和节点 16

关于javascript - Webpack 未构建,因为 CssSyntaxError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63794652/

相关文章:

javascript - Bootstrap 列达到相同的高度,子级与高度匹配

html - Bootstrap 行和文本

css - 如何用CSS反转波浪SVG?

html - CSS z-index 之谜

javascript - WebPack io.js 生成器支持

javascript - 通过 Webpack 加载 FontAwesome : Fonts do not load

javascript - django 管理界面 change_form.html 将数据添加到 querydict/post?

php - 我在 Chrome 中看不到带有 onmessage 方法的 HTML5 EventSource 事件

javascript - 如何使用客户端代码阻止某个国家/地区访问网站

javascript - 使用 webpack 动态加载 PapaParse