【问题标题】:ExtractTextPlugin and postCSS - autoprefixer not workingExtractTextPlugin 和 postCSS - 自动前缀不工作
【发布时间】:2016-08-22 06:24:13
【问题描述】:

我正在尝试将 webpack 设置为编译通过,它会扫描一个文件树中的所有 css 文件,然后生成一个 css 文件,其中包含捆绑、自动前缀和最小化的所有样式。

我无法让 autoprefixer 插件工作。

这里是相关的 webpack 配置部分:

const webpack = require('webpack')
const path = require('path')
const glob = require('glob')
const ExtractTextPlugin = require('extract-text-webpack-plugin');

// postCSS plugins
const autoprefixer = require('autoprefixer')

module.exports = [
{
  // another compilation pass
},
{
  name: 'static-css',
  entry: {
    vendor: glob.sync(path.join(__dirname, 'assets/stylesheets/vendor/**/*.css')),
    styles: glob.sync(path.join(__dirname, 'assets/stylesheets/src/**/*.css'))
  },
  devtool: 'source-map',
  output: {
    path: path.join(__dirname, 'assets/stylesheets/build/'),
    filename: 'bundle.js',
  },
  module: {
    loaders: [
      // css loader for custom css
      {
        test: /\.css$/,
        include: path.join(__dirname, 'assets/stylesheets/src'),
        loader: ExtractTextPlugin.extract('style-loader', 'css-loader!postcss-loader')
      },
      // css loader for vendor css
      {
        test: /\.css$/,
        include: path.join(__dirname, 'assets/stylesheets/vendor'),
        loader: 'style-loader!css-loader'
      },
      // other loaders for images, fonts, and svgs
      {
        test: /\.png$/,
        loader: 'url-loader?limit=100000'
      },
      {
        test: /\.jpg$/,
        loader: 'file-loader'
      },
      {
        test: /\.(woff|woff2)(\?v=\d+\.\d+\.\d+)?$/,
        loader: 'url?limit=10000&mimetype=application/font-woff'
      },
      {
        test: /\.ttf(\?v=\d+\.\d+\.\d+)?$/,
        loader: 'url?limit=10000&mimetype=application/octet-stream'
      },
      {
        test: /\.eot(\?v=\d+\.\d+\.\d+)?$/,
        loader: 'file'
      },
      {
        test: /\.svg(\?v=\d+\.\d+\.\d+)?$/,
        loader: 'url?limit=10000&mimetype=image/svg+xml'
      }
    ],
    postcss: function() {
      return [
        autoprefixer
      ]
    }
  },
  plugins: [
    // extract css in a .css file
    new ExtractTextPlugin('[name].css')
  ]
}
];

当我运行 webpack 时,我将所有文件压缩到 bundle.js 中,并正确提取到单独的 styles.css 文件中。但未应用供应商前缀。

我正在使用这个类来测试前缀:

.autoprefixer-test {
  display: flex;
  transition: all .5s;
  background: linear-gradient(to bottom, white, black);
  user-select: none;
}

我已尝试更改对 ExtractTextPlugin.extract 的调用,如在其他帖子中看到的 ExtractTextPlugin.extract('style-loader', ['css-loader', 'postcss-loader']),但它根本没有帮助。

有什么想法吗?

【问题讨论】:

    标签: webpack autoprefixer postcss webpack-plugin


    【解决方案1】:

    您似乎放错了postcss 参数。根据https://github.com/postcss/postcss-loader 的文档,以下代码应放在配置的顶层,而不是module 部分:

    postcss: function() {
      return [
        autoprefixer
      ]
    }
    

    更新。

    事实上,为了使 postcss 和 webpack 的这种集成能够正常工作,需要编写更多的配置。感谢以下线程,我找到了解决方案https://github.com/postcss/postcss-loader/issues/8

    首先,为了使postcss 能够处理@import'ed 文件,需要使用postcss-import 插件。为了将此插件与 webpack 集成(例如,启用文件监视以进行热重载或重建),从初始化程序的函数参数中获取的特殊参数作为参数传递给 postcssImport,如下所示:

    var autoprefixer = require('autoprefixer');
    var postcssImport = require('postcss-import');
    ....
    postcss: function(webpack) {
      return [
        postcssImport({ addDependencyTo: webpack }), // should be first
        autoprefixer
      ];
    ]
    

    遗憾的是,当使用 url(...) 和相对路径时,这会破坏通过 webpack 加载资产。这是因为postcss-import 将所有@import 的文件合并为一个,但路径仍然相对于文件的初始目录。为了重写相对路径,应该使用postcss-url 插件,配置现在看起来像这样:

    var autoprefixer = require('autoprefixer');
    var postcssImport = require('postcss-import');
    var postcssUrl = require('postcss-url');
    ....
    postcss: function(webpack) {
      return [
        postcssImport({ addDependencyTo: webpack }),
        postcssUrl(),
        autoprefixer
      ];
    ]
    

    【讨论】:

    • 天哪,我不敢相信这是因为 postcss 选项没有设置在正确的级别那么简单......谢谢伙计。还要感谢其他想法,尚未导入任何 css,但肯定会在某个时候派上用场。
    • 非常感谢您解释所有这些。
    猜你喜欢
    • 1970-01-01
    • 2018-05-30
    • 2015-03-20
    • 1970-01-01
    • 2018-04-06
    • 2017-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多