代码之家  ›  专栏  ›  技术社区  ›  Shevchenko Viktor

输出2个(或更多).css文件,Webpack中包含迷你css提取插件

  •  6
  • Shevchenko Viktor  · 技术社区  · 7 年前

    使用Webpack2(或3)时,我可以编写如下代码:

    const coreStyles = new ExtractTextPlugin('./styles/core.bundle.css');
    const componentStyles = new ExtractTextPlugin('./styles/components.bundle.css');
    
    rules: [
    {
       test: /\.scss$|\.css$/,
       include: path.resolve(__dirname, './styles/App.scss'),
       use: coreStyles.extract({
           use: ['css-loader', 'sass-loader']
       })
    },
    {
       test: /\.scss$|\.css$/,
       exclude: path.resolve(__dirname, './styles/App.scss'),
       use: componentStyles.extract({
           use: ['css-loader', 'sass-loader']
       })
    }
    ]
    

    结果,我输出了2个CSS文件。

    我怎样才能达到同样的效果 mini-css-extract-plugin 是吗?根据文档,我只能指定一个文件名:

    plugins: [
        new MiniCssExtractPlugin({
            filename: "[name].css",
        })
    ]
    

    谢谢。

    1 回复  |  直到 7 年前
        1
  •  12
  •   DesignMonkeyJim    7 年前

    此示例也符合SCSS,并且不使用minicsSextracPlugin

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

    然后在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
                            }
                        }
                    ]
                },
            ],
        },
    };
    

    - dist
    --- block.editor.build.css
    --- block.style.build.css
    --- blocks.build.js
    
    - blocks.js
    - block.editor.scss
    - block.style.scss
    

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

    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({})
            ]
        },
    };
    

    推荐文章