Webpack: как объединить css и меньше, ТО применить cssnano

Мне удалось скомпилировать мой CSS и меньше ресурсов ("импортированных" из JavaScript) в all-my-LESS|CSS, извлеките их, используя ExtractTextPlugin и объединить их вместе с MergeFilesPlugin в combinedStyles.css,

Бит, который мне не хватает: как запустить cssnano (например, через postcss?) Поверх этого как завершающий бит? (Да, и хотя у меня были встроенные исходные карты, мне не удалось создать внешний combinedStyles.map файл).

Это мой совместный webpack.config.babel.js (не обращайте внимания на бит babel, просто означает, что вы можете написать его в ES6 с помощью более сложных операторов импорта):

import path from 'path';

const webpack = require('webpack'); //to access built-in plugins
import ExtractTextPlugin from 'extract-text-webpack-plugin';
import MergeFilesPlugin from 'merge-files-webpack-plugin';

const extractCSS = new ExtractTextPlugin("all-my-CSS.css");
const extractLESS = new ExtractTextPlugin("all-my-LESS.css");

export default {
    entry: [ './src/index_5.js' ],
    output: {
        path: path.resolve( 'dist')
        filename: 'bundle.js',
        sourceMapFilename: './bundle.js.map'
    },

    module: {
        rules: [{
                test: /\.css$/,
                use: extractCSS.extract(
                    [{  // This is basically "use"
                        loader: "css-loader",
                        options: {
                            minimize: false, // done later
                            sourceMap: true,
                            modules: false, // no css modules, all global styles
                        }
                    }]
                )
            },
            {
                test: /\.less$/,
                use: extractLESS.extract(  // This is basically "use"
                    [// No style-loader here! We want this external!
                    {
                        loader: "css-loader", // translates CSS into CommonJS
                        options: {
                            minimize: false,
                            sourceMap: true
                        }
                    }, {
                        loader: "less-loader", // compiles Less to CSS
                        options: {
                            sourceMap: true,
                        }
                    }]
                )
            }
        ] // rules
    }, // module

    devtool: 'inline-source-map',
    devServer: { inline: true },

    plugins: [
        extractCSS,
        extractLESS,
        new MergeFilesPlugin({
            filename: 'combinedStyles.css', //output filename
            test: /\.css$/,
            deleteSourceFiles: false // for now
        })
    ]
};

1 ответ

Я добавил postcss-loader с css-nanoПроверьте, поможет ли это.

Также я не вижу здесь необходимости использовать MergeFilesPlugins (только мое мнение) . ExtractTextPlugin может быть полезно здесь.

Просто используйте один ExtractTextPlugin и поместите все файлы CSS или меньше в одну папку (с.css или.less ext), загрузчики будут применены к ним выборочно, а позже в плагинах просто используйте

new ExtractTextPlugin('style.css')

извлечь общий CSS-файл.

Использование cssnano:

[{
                test: /\.css$/,
                use: ExtractTextPlugin.extract(
                    [{  // This is basically "use"
                        loader: "css-loader",
                        options: {
                            minimize: false, // done later
                            sourceMap: true,
                            modules: false, // no css modules, all global styles
                        }
                    },
                    {
                        loader: 'postcss-loader',
                        options: {
                                plugins: function () {
                                        return [
                                        require('cssnano')({
                                            autoprefixer: false,
                                            safe: true
                                            })
                                        ];
                                }
                           }
                    }]
                )
            },
            {
                test: /\.less$/,
                use: ExtractTextPlugin.extract(  // This is basically "use"
                    [// No style-loader here! We want this external!
                    {
                        loader: "css-loader", // translates CSS into CommonJS
                        options: {
                            minimize: false,
                            sourceMap: true
                        }
                    },
                    {
                        loader: 'postcss-loader',
                        options: {
                                plugins: function () {
                                        return [
                                        require('cssnano')({
                                            autoprefixer: false,
                                            safe: true
                                            })
                                        ];
                                 }
                            }
                    },
                    {
                        loader: "less-loader", // compiles Less to CSS
                        options: {
                            sourceMap: true,
                        }
                    }]
                )
            }
        ]
Другие вопросы по тегам