Webpack extract-text-webpack-plugin 和 css-loader 缩小

Webpack extract-text-webpack-plugin and css-loader minification

我在最小化 extract-text-webpack-plugin

输出的 css 文件时遇到问题
/* webpack.config.js */
...
loader: [{test: /\.css$/, loader: ExtractTextPlugin.extract('css?minimize')}]
...
plugins: [new ExtractTextPlugin("styles.css")]
...

/* test.js */
require('./file1.css')
/* file1.css */
@import './file2.css';
body {color: green;}
body {font-size: 1rem;}

/* file2.css */
body {border: 1px solid;}
body {background: purple;}

/* the output styles.css */
body{color:green;font-size:1rem}body{border:1px solid;background:purple}

在生成的 styles.css 中,有 2 个 body 标签。似乎缩小是在一个文件内执行的(在 file1.css 内和 file2.css 内),但当两个文件合并并提取到最终的 styles.css.

时则不会。

如何对最终的 style.css 进行缩小?所以输出是

body{color:green;font-size:1rem;border:1px solid;background:purple}

您可以使用 optimize-css-assets-webpack-plugin,它的创建正是为了解决这个问题。

plugins: [
    new ExtractTextPlugin("styles.css"),
    new OptimizeCssAssetsPlugin()
]

对于 css 压缩,您可以使用带有 "minimize" 选项的 webpack 的 CSS-loader。它解决了我的问题:

webpack.config.js

...
module: {
   rules: [
      {
         test: /\.css$/,
         use: [{
            loader: "css-loader",
            options: {
               minimize: true
            }
         }
      },
   ]
},
...

Paul 的回答已停止使用 1.0.0 Minimize 中的重大更改,并且已从选项中删除了一些其他选项。

推荐的解决方案是使用optimize-cssnano-plugin。这个插件比 optimize-css-assets-webpack-plugin.

更适合源映射

示例:

plugins: [
    new ExtractTextPlugin("styles.css"),
    new OptimizeCssnanoPlugin({
        sourceMap: nextSourceMap,
        cssnanoOptions: {
        preset: ['default', {
            discardComments: {
            removeAll: true,
            },
        }],
        },
    }),
]