Как правильно обрабатывать css-файлы с помощью плагина mini-css-extract-plugin в webpack 4?

Есть простой конфиг для webpack 4

const path = require('path');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');

module.exports = {
    entry: {
        app: './src/index.js',
    },
    output: {
        filename: '[name].js',
        path: path.resolve(__dirname, './dist'),
        publicPath: '/dist',
    },
    plugins: [
        new MiniCssExtractPlugin({
            filename: '[name].css',
        })
    ],
    module: {
        rules: [
            {
                test: /\.js$/,
                loader: 'babel-loader',
                exclude: '/node_modules/'
            },
            {
                test: /\.css$/,
                use: [
                    MiniCssExtractPlugin.loader,
                    'css-loader'
                ],
            },
        ],
    },
}

CSS-файл импортируется в точку входа (index.js), необходимо вывести его в производственной сборке в отдельный CSS-файл (используя mini-css-extract-plugin, хотите попробовать именно этот плагин, а не другой методы). Но возникает ошибка: https://i.stack.imgur.com/VoqTW.png

Вот полная файловая структура https://github.com/DazzRune/webpack4test


person DazzRune    schedule 20.10.2019    source источник


Ответы (2)


Все работает нормально, webpack компилируется без ошибок. Попробуйте сделать npm install, так как у вас есть все необходимые загрузчики для выполнения этой задачи.

person Alonad    schedule 20.10.2019
comment
Я попытался установить еще раз, затем npm run build и получил ту же ошибку, что и на моем скриншоте. - person DazzRune; 20.10.2019
comment
ошибка говорит о том, что у вас нет подходящего загрузчика для обработки файла css, а в вашей конфигурации он у вас есть. Кроме того, на моей машине компиляция прошла без ошибок. - person Alonad; 20.10.2019

Вы можете попробовать это:

{
                test: /\.css$/,
                use: [{
                    loader: MiniCssExtractPlugin.loader,
                    options: {
                        publicPath: (resourcePath, context) => {
                            return path.relative(path.dirname(resourcePath), context) + '/';
                        }
                    }
                },
                'css-loader'
            ]
            }

и

new MiniCssExtractPlugin({
            filename: "[name].css",
            chunkFilename: "[id].css",
            ignoreOrder: false
        })

Он работает со мной. Благодарим этого парня!

person Waleed    schedule 04.12.2019