webpack - 在 webpack 中使用 mini-css-extract-plugin 输出 2 个(或更多).css 文件

标签 webpack extract-text-plugin extracttextwebpackplugin mini-css-extract-plugin

使用 webpack 2(或 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",
    })
]

谢谢。

最佳答案

此示例也符合 SCSS 并且不使用 MiniCssExtractPlugin
在 Webpack 4.16.5 中,我通过首先安装这 2 个软件包设法使其工作

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
                        }
                    }
                ]
            },
        ],
    },
};
这将输出以下结构
缩小 CSS 安装
npm install --save-dev uglifyjs-webpack-plugin
npm install --save-dev optimize-css-assets-webpack-plugin
添加到 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({})
        ]
    },
};
希望这可以帮助

关于webpack - 在 webpack 中使用 mini-css-extract-plugin 输出 2 个(或更多).css 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50976979/

相关文章:

javascript - 如何使用 laravel-webpack 从 Composer 安装的新包中导入 css、js?

angular - Nativescript 的 AOT 编译成功 - 但仍然包含 `Compiler` 包?

Webpack 2 ExtractTextPlugin CSS 源映射覆盖 babel 6 JS 源映射

Webpack 2 - 文本提取后的冗余捆绑文件

webpack - extract-text-webpack-plugin 不创建 CSS 文件

reactjs - 将 css 模块与 Extract Text 插件结合使用

vue.js - 使用 Vue 2 设置 Webpack 5 时出现 "Cannot find module ' vue/compiler-sfc'"

reactjs - 使用 Webpack 2 和 React Router 进行 CSS 代码分割

node.js - npm 升级后 Webpack 未构建

angular2-template-loader 无法内联组件模板