Webpack4 - CSS-файлы, импортированные из меньшего количества файлов, не минимизируются - PullRequest
0 голосов
/ 13 сентября 2018

Я собираю проект с веб-пакетом 4. Практически все это работает так, как должно, у меня просто проблемы с минимизацией CSS.

Если в моей точке входа я включаю a.css или.меньше файлов, тогда все работает правильно.Это также работает правильно, если я использую @include './myfile.less'.Однако, если я использую @include './myfile.css', этот раздел импортируется без минимизации.

Как заставить работать импортированные CSS-файлы?

webpack.config

const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin'); //installed via npm
const webpack = require('webpack'); //to access built-in plugins
const CopyWebpackPlugin = require('copy-webpack-plugin');
const MiniCssExtractPlugin = require("mini-css-extract-plugin");

module.exports = {

    entry: {
        'app': './src/app/app.js',
    },

    output: {
        path: path.resolve(__dirname, 'dist'),
        filename: '[name].bundle.js'
    },

    module: {
        rules: [
            {
                test: /\.html/,
                use: 'html-loader'
            },
            {
                test: /\.less$/,
                use: [
                    {
                        loader: MiniCssExtractPlugin.loader,
                    },
                    "css-loader",
                    "less-loader"
                ]
            },
            {
                test: /\.(png|svg|jpg|gif)$/,
                use: ['file-loader?name=assets/images/[path][name].[ext]?[hash]']
            },
            {
                test: /\.(woff|woff2|eot|ttf|otf)$/,
                use: [
                    'file-loader?name=assets/fonts/[name].[ext]?[hash]'
                ]
            }
        ],
    },

    plugins: [
        new HtmlWebpackPlugin({ template: './src/public/index.html' }),
        new MiniCssExtractPlugin({
            // Options similar to the same options in webpackOptions.output
            // both options are optional
            filename: "[name].bundle.css",
            chunkFilename: "[id].css"
        }),
    ]

};

Ответы [ 3 ]

0 голосов
/ 13 сентября 2018

Хотя веб-пакет 5, скорее всего, будет иметь встроенный минимизатор CSS, с веб-пакетом 4 вам понадобится свой собственный. Чтобы минимизировать вывод, используйте плагин, такой как optimize-css-assets-webpack-plugin. Параметр Optimization.minimizer переопределяет значения по умолчанию, предоставляемые веб-пакетом, поэтому обязательно укажите также JS minimizer

.

webpack.config.js

const UglifyJsPlugin = require("uglifyjs-webpack-plugin");
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
const OptimizeCSSAssetsPlugin = require("optimize-css-assets-webpack-plugin");
module.exports = {
  optimization: {
    minimizer: [
      new UglifyJsPlugin({
        cache: true,
        parallel: true,
        sourceMap: true // set to true if you want JS source maps
      }),
      new OptimizeCSSAssetsPlugin({})
    ]
  },
  plugins: [
    new MiniCssExtractPlugin({
      filename: "[name].css",
      chunkFilename: "[id].css"
    })
  ],
  module: {
    rules: [
      {
        test: /\.css$/,
        use: [
          MiniCssExtractPlugin.loader,
          "css-loader"
        ]
      }
    ]
  }
}

Ссылка

0 голосов
/ 19 ноября 2018
use: [
    MiniCssExtractPlugin.loader,
    {
        loader: "css-loader",
        options: {
            minimize: true
        }
    }
]
0 голосов
/ 13 сентября 2018

Я обнаружил заметки о производственном использовании MiniCssExtractPlugin .

После этого исправлена ​​проблема:

специально добавив:

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