简体   繁体   English

Webpack 5 - mini-css-extract-plugin 和 split-chunks-plugin 在样式上产生冲突。css

[英]Webpack 5 - mini-css-extract-plugin and split-chunks-plugin produces conflict on style.css

I am upgrading webpack on my application from v4 to v5.我正在将我的应用程序上的 webpack 从 v4 升级到 v5。 I am receiving this error on npx webpack :我在npx webpack上收到此错误:

[webpack-cli] Error: Conflict: Multiple chunks emit assets to the same filename style.css (chunks app and vendor)
    at C:\workspace\my-lib\my-lib-ui\node_modules\webpack\lib\Compilation.js:4610:12
    at C:\workspace\my-lib\my-lib-ui\node_modules\webpack\lib\Cache.js:91:34
    at Array.<anonymous> (C:\workspace\my-lib\my-lib-ui\node_modules\webpack\lib\cache\MemoryCachePlugin.js:45:13)
    at C:\workspace\my-lib\my-lib-ui\node_modules\webpack\lib\Cache.js:91:19
    at Hook.eval [as callAsync] (eval at create (C:\workspace\my-lib\my-lib-ui\node_modules\tapable\lib\HookCodeFactory.js:33:10), <anonymous>:19:1)
    at Cache.get (C:\workspace\my-lib\my-lib-ui\node_modules\webpack\lib\Cache.js:75:18)
    at ItemCacheFacade.get (C:\workspace\my-lib\my-lib-ui\node_modules\webpack\lib\CacheFacade.js:111:15)
    at C:\workspace\my-lib\my-lib-ui\node_modules\webpack\lib\Compilation.js:4556:22
    at arrayEach (C:\workspace\my-lib\my-lib-ui\node_modules\neo-async\async.js:2405:9)
    at Object.each (C:\workspace\my-lib\my-lib-ui\node_modules\neo-async\async.js:2846:9)

My webpack.config.js:我的 webpack.config.js:

const path = require('path');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
const CopyPlugin = require('copy-webpack-plugin');
const ESLintPlugin = require('eslint-webpack-plugin')
const MODE = process.env.NODE_ENV || 'development';

module.exports = {
    entry: {
        app: path.join(__dirname, 'src/main/js/index')
    },
    resolve: {
        extensions: ['.js', '.jsx'],
        alias: {
            'react': path.resolve('./node_modules/react'),
            'react-dom': path.resolve('./node_modules/react-dom')
        }
    },
    output: {
        path: path.resolve(__dirname, 'target/classes/public'),
        filename: '[name].js',
        assetModuleFilename: '[name]-[hash:7][ext]',
        sourceMapFilename: '[name].js.map',
        chunkFilename: '[name]-[hash:7].js'
    },
    mode: MODE,
    module: {
        rules: [
            {
                test: /\.(js|jsx)?$/,
                use: {
                    loader: 'babel-loader',
                    options: {
                        presets: ['@babel/preset-env'],
                        exclude: /node-modules/
                    }
                }
            },
            {
                test: /\.(css)$/,
                use: [
                    MiniCssExtractPlugin.loader, 'css-loader'
                ]
            },
            {
                test: /\.(scss)$/,
                use: [
                    MiniCssExtractPlugin.loader, 'css-loader', 'sass-loader'
                ]
            },
            {
                test: /\.(less)$/,
                use: [
                    MiniCssExtractPlugin.loader, 'css-loader', 'less-loader'
                ]
            },
            {
                test: /\.(woff|woff2|eot|ttf|otf|png|svg|jpg|jpeg|gif)$/i,
                type: 'asset/resource',
            }
        ]
    },
    plugins: [
        new ESLintPlugin({extensions: ['js', 'jsx']}),
        new MiniCssExtractPlugin({
            filename: 'style.css'
        }),
        new CopyPlugin({
            patterns: [{from: path.join(__dirname, 'node_modules/core-js/client/shim.min.js'), to: 'shim.js'}],
        }),
    ],
    optimization: {
        chunkIds: 'named',
        splitChunks: {
            cacheGroups: {
                vendor: {
                    filename: 'vendor.js',
                    test: /[\\/]node_modules[\\/]/,
                    name: 'vendor',
                    chunks: 'all'
                },
                default: false
            }
        },
    },
    devtool: MODE === 'development' ? 'inline-source-map' : false
};

and package.json:和 package.json:

    "webpack": "^5.72.1",
    "webpack-cli": "^4.9.2"
    "mini-css-extract-plugin": "^2.6.0",

change filename: '[name].js', to filename: "[name].[contenthash].js"将文件名:'[name].js' 更改为文件名:“[name].[contenthash].js”

Webpack is trying to split CSS files into chunks as well, but your MiniCssExtractPlugin is configured to output only one name filename: style.css . Webpack 也试图将 CSS 文件拆分成块,但是您的MiniCssExtractPlugin配置为 output 只有一个名称filename: style.css Change that to filename: [name].css .将其更改为filename: [name].css Don't forget to update your HTML template accordingly, as your root CSS file name will change.不要忘记相应地更新您的 HTML 模板,因为您的根 CSS 文件名将会更改。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 Webpack:mini-css-extract-plugin 不输出 css 文件 - Webpack: mini-css-extract-plugin not outputting css file Webpack 找不到模块 mini-css-extract-plugin - Webpack cannot find module mini-css-extract-plugin Webpack 在 mini-css-extract-plugin 加载程序上出错 - Webpack erroring on mini-css-extract-plugin loader Webpack,css-minimizer-webpack-plugin 与 mini-css-extract-plugin - Webpack, css-minimizer-webpack-plugin vs mini-css-extract-plugin 如何在 mini-css-extract-plugin 中修复 css 的 hmr? - How to fix hmr for css in mini-css-extract-plugin? 为没有 HTML 的 webpack mini-css-extract-plugin 提取文件创建链接标签 - Create link tag for webpack mini-css-extract-plugin extracted file without HTML mini-css-extract-plugin 生成两个额外的 JS 文件 - mini-css-extract-plugin generates two additional JS files 由 mini-css-extract-plugin 生成的大型控制台输出 - Large console output produced by mini-css-extract-plugin 如何排除 html-webpack-plugin 生成的链接标签(或者更具体地说是由 mini-css-extract-plugin 提取的 .css 文件)? - How to exclude link tags (or more specifically .css files extracted by the mini-css-extract-plugin) from being generated by html-webpack-plugin? Mini-css-extract-plugin不会将我的css与sass捆绑到一个文件中 - Mini-css-extract-plugin doesn't bundle my css into one single file with sass
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM