Output 2 (or more) .css files with mini-css-extract-plugin in webpack

前端 未结 1 343
失恋的感觉
失恋的感觉 2021-02-03 11:24

When using webpack 2(or 3), I could write code like:

const coreStyles = new ExtractTextPlugin(\'./styles/core.bundle.css\');
const componentStyles = new ExtractT         


        
1条回答
  •  不知归路
    2021-02-03 11:52

    This Example also complies the SCSS and doesn't use MiniCssExtractPlugin

    In Webpack 4.16.5 I have managed to get this to work by first installing these 2 packages

    npm install --save-dev file-loader
    npm install --save-dev extract-loader
    

    Then in your webpack.config.js

    //const MiniCssExtractPlugin = require("mini-css-extract-plugin");
    
    var path = require("path");
    
    module.exports = {
        entry: ['./blocks.js', './block.editor.scss', './block.style.scss'],
        mode: 'production',//change to 'development' for non minified js
        output: {
            path: path.resolve(__dirname, "dist"),
            filename: 'blocks.build.js',
            publicPath: "/dist"
        },
        watch: true,
        module: {
            rules: [
                {
                    test: /.js$/,
                    loader: 'babel-loader',
                    exclude: /node_modules/,
                },
                {
                    test: /\.scss$/,
                    use: [
                        {
                            loader: 'file-loader',
                            options: {
                                name: '[name].build.css',
                                context: './',
                                outputPath: '/',
                                publicPath: '/dist'
                            }
                        },
                        {
                            loader: 'extract-loader'
                        },
                        {
                            loader: 'css-loader',
                        },
                        {
                            loader: 'sass-loader',
                            options: {
                                sourceMap: true
                            }
                        }
                    ]
                },
            ],
        },
    };
    

    This will output the following structure

    To minifi the CSS install

    npm install --save-dev uglifyjs-webpack-plugin
    npm install --save-dev optimize-css-assets-webpack-plugin
    

    add to webpack.config.js

    const UglifyJsPlugin = require("uglifyjs-webpack-plugin");
    const OptimizeCSSAssetsPlugin = require("optimize-css-assets-webpack-plugin");
    
    var path = require("path");
    
    module.exports = {
        //...
        watch: true,
        module: {
            rules: [
                //...
            ],
        },
        optimization: {
            minimizer: [
                new UglifyJsPlugin({
                    cache: true,
                    parallel: true,
                    sourceMap: true // set to true if you want JS source maps
                }),
                new OptimizeCSSAssetsPlugin({})
            ]
        },
    };
    

    Hope this helps

    0 讨论(0)
提交回复
热议问题