【问题标题】:Webpack extract-text-webpack-plugin and css-loader minificationWebpack extract-text-webpack-plugin 和 css-loader 缩小
【发布时间】:2016-03-11 00:59:01
【问题描述】:

我在最小化 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}

【问题讨论】:

    标签: webpack css-loader


    【解决方案1】:

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

    推荐的解决方案是使用optimize-cssnano-plugin。此插件与 source maps 配合使用比 optimize-css-assets-webpack-plugin 更好。

    例子:

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

    【讨论】:

      【解决方案2】:

      对于 css 缩小,您可以使用带有“最小化”选项的 webpack 的 CSS-loader。它解决了我的问题:

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

      【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      • 将测试在 webpack 之后使用 cssnano 独立。如果相等,我想这将是最好的答案,我会奖励你。谢谢(你的)信息。出于好奇,该项目创建于 4 天前(供参考,2016 年 1 月 8 日),您是如何找到它的?
      • 我用谷歌搜索了这个问题,奇怪的是这个项目在谷歌的第一页上。我一定使用了正确的关键字集:)
      • 我可以确认这与在生成的 bundle.css 文件上运行 cssnano 的最终结果相同......但直接在 webpack 中。这是个好消息!赏金。
      • 它应该与 sourceMap 选项一起使用吗?因为对我来说optimize-css-assets-webpack-plugincssnano 中断源映射 - 当我使用第一个规则时,所有规则都指向已编译的 .css 文件而不是 .scss 源文件,当我使用 cssnano 时,规则指向源文件,但始终指向文件结束。
      • 太棒了!太感谢了 !! :)