在 Webpack 2 中使用 extractTextPlugin 和 postCss 插件

Use extractTextPlugin and postCss plugins in Webpack 2

我正在从 webpack v1 迁移到 v2。我按照官方文档更新了 webpack.config.js:

...
module: {
    rules: [
        {
            test: /\.css$/,
            use: extractTextPlugin.extract({
                fallback: 'style-loader',
                use: [
                    'css-loader?modules&localIdentName=[path][name]_[local]--[hash:base64:8]',
                    'postcss-loader'
                ],
            }),
            exclude: [...]
        },
        {
            test: /\.css$/,
            use: extractTextPlugin.extract({
                fallback: 'style-loader',
                use: 'css-loader',
            }),
            include: [...]
        }
    ]
},
...
/**
 * postcss: [
 *   nested(),
 *   autoprefixer(),
 *   values
 * ]
 */

我的问题是 postcss 插件(嵌套、自动前缀、值)。 Webpack 2 不再支持自定义 属性,建议使用 options.

我尝试了 optionsplugins: () => [nested, autoprefixer, values] 但无法正常工作。

执行此操作的正确方法是什么?谢谢。

建议使用 postcss.config.js 文件导出带有选项的对象(参见 Postcss usage)。您的配置将如下所示(省略导入语句):

module.exports = {
  plugins: [
    nested(),
    autoprefixer(),
    values
  ]
}

但如果你想的话,你可以直接在webpack配置中指定(如Postcss options所示):

{
  test: /\.css$/,
  use: extractTextPlugin.extract({
    fallback: 'style-loader',
    use: [
      'css-loader?modules&localIdentName=[path][name]_[local]--[hash:base64:8]',
      {
        loader: 'postcss-loader',
        options: {
          plugins: () => [nested(), autoprefixer(), values]
        }
      }
    ]
  })
  exclude: [...]
},

请注意,选项在加载程序本身,而不是整个规则。