当我使用 mini-css-extract-plugin 我得到 [webpack-cli] Invalid configuration object 错误

when I use mini-css-extract-plugin I get [webpack-cli] Invalid configuration object error

我正在尝试使用迷你 css 提取插件,但它不起作用。我找不到正确的配置。我得到这个:[webpack-cli] 无效的配置对象。 Webpack 已使用与 API 架构不匹配的配置对象进行初始化。 configuration.plugins[2] 应该是其中之一: 对象 { 应用,... } |功能 对象或 instanceof 函数类型的插件。 细节: configuration.plugins[2] 应该是一个对象: 对象 { 应用,... } 插件实例。 configuration.plugins[2] 应该是一个函数实例。 作为插件的功能。 错误 命令失败,退出代码为 2。 我还需要降级 webpack 或 webpack-cli 吗?还有其他问题吗?

webpack.common.js:

const path = require("path");
const HtmlWebpackPlugin = require("html-webpack-plugin");
const webpack = require("webpack");
const MiniCssExtractPlugin = require("mini-css-extract-plugin");

const devMode = process.env.NODE_ENV !== "production";

module.exports = {
    entry: {
        app: "./src/app.js",
    },
    plugins: [
        new HtmlWebpackPlugin({
            title: "Expensify",
            template: "./src/index.html",
        }),
        [].concat(devMode ? [] : [new MiniCssExtractPlugin()]),
    ],
    output: {
        path: path.join(__dirname, "public"),
        filename: "bundle.js",
        clean: true,
    },
    module: {
        rules: [
            {
                test: /\.html$/i,
                loader: "html-loader",
            },
            {
                loader: "babel-loader",
                test: /\.js$/,
                exclude: /node_modules/,
            },
            {
                test: /\.s?css$/,
                use: [
                    devMode ? "style-loader" : MiniCssExtractPlugin.loader,
                    "css-loader",
                    "sass-loader",
                ],
            },
        ],
    },
};

和package.json:

{
    "name": "expensify",
    "version": "1.0.0",
    "main": "index.js",
    "author": "Nagehan",
    "license": "MIT",
    "private": false,
    "scripts": {
        "serve": "live-server public/",
        "build:dev": "webpack serve --config webpack.dev.js",
        "build:prod": "webpack serve --config webpack.prod.js",
        "dev-server": "webpack serve",
        "test": "jest --config=jest.config.json"
    },
    "dependencies": {
        "@babel/cli": "^7.14.5",
        "@babel/core": "^7.14.6",
        "@babel/plugin-proposal-class-properties": "^7.14.5",
        "@babel/plugin-proposal-object-rest-spread": "^7.14.5",
        "@babel/preset-env": "^7.14.5",
        "@babel/preset-react": "^7.14.5",
        "babel-loader": "^8.2.2",
        "css-loader": "^5.2.6",
        "css-minimizer-webpack-plugin": "^3.0.2",
        "enzyme": "^3.11.0",
        "enzyme-to-json": "^3.6.2",
        "html-loader": "^2.1.2",
        "html-webpack-plugin": "^5.3.2",
        "jest": "^27.0.5",
        "live-server": "^1.2.1",
        "mini-css-extract-plugin": "^1.6.2",
        "moment": "^2.29.1",
        "node-sass": "^6.0.0",
        "normalize.css": "^8.0.1",
        "raf": "^3.4.1",
        "react": "^17.0.2",
        "react-addons-shallow-compare": "^15.6.3",
        "react-dates": "^21.8.0",
        "react-dom": "^17.0.2",
        "react-modal": "^3.14.3",
        "react-redux": "^7.2.4",
        "react-router-dom": "^5.2.0",
        "react-test-renderer": "^17.0.2",
        "redux": "^4.1.0",
        "sass-loader": "^12.1.0",
        "style-loader": "^2.0.0",
        "uuid": "^8.3.2",
        "validator": "^13.6.0",
        "webpack": "^5.39.0",
        "webpack-dev-server": "^3.11.2",
        "webpack-merge": "^5.8.0"
    },
    "devDependencies": {
        "@wojtekmaj/enzyme-adapter-react-17": "^0.6.2",
        "webpack-cli": "^4.7.2"
    }
}

可能您已经找到了解决方案,但如果没有,这可能会对您有所帮助。

通过在插件数组内的空数组上调用 concat,您总是会添加一个数组。插件中的数组未扩展。因为这个解决方案是直接在插件数组上调用 concat():

plugins: [
  new HtmlWebpackPlugin({
    title: "Expensify",
    template: "./src/index.html",
  })
].concat(devMode ? [] : [new MiniCssExtractPlugin()])