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

时间:2015-12-06 10:30:05

标签: webpack css-loader

我在使用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}

3 个答案:

答案 0 :(得分:48)

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

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

答案 1 :(得分:2)

对于css缩小,你可以使用webpack的CSS-loader和"最小化"选项。它解决了我的问题:

webpack.config.js

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

答案 2 :(得分:0)

Paul的答案已停止处理1.0.0最小化中的更改,并且其他一些选项已从选项中删除。

推荐的解决方案是使用optimize-cssnano-plugin。该插件与源地图相比,与optimize-css-assets-webpack-plugin配合使用效果更好。

示例:

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