Webpack 4,postcss-loader和autoprefixer插件

时间:2018-04-11 19:10:48

标签: javascript webpack

我试图让autoprefixer工作变得非常沮丧。

这是我的 webpack.config.js

const HtmlWebPackPlugin = require("html-webpack-plugin");
const MiniCssExtractPlugin = require("mini-css-extract-plugin");

const config = {
    module: {
        rules: [
            {
                test: /\.js$/,
                exclude: /node_modules/,
                use: {
                    loader: "babel-loader"
                }
            },
            {
                test: /\.(scss)$/,
                use: [
                    MiniCssExtractPlugin.loader,
                    { loader: "css-loader", options: {} },
                    { loader: "postcss-loader", options: {} },
                    // {
                    //  loader: "postcss-loader",
                    //  options: {
                    //      ident: "postcss",
                    //      plugins: (loader) => [
                    //          require('autoprefixer')({ browsers: ['defaults']})
                    //      ]
                    //  }
                    // },
                    { loader: "sass-loader", options: {} }
                ]
            },
            {
                test: /\.mp3$/,
                use: {
                    loader: "file-loader"
                }
            }
        ]
    },
    plugins: [
        new HtmlWebPackPlugin({
            template: "./src/index.html",
            filename: "./index.html"
        }),
        new MiniCssExtractPlugin({
            filename: "main.css"
        })
    ]
};

module.exports = config;

这是我的 postcss.config.js

module.exports = {
  plugins: [
    require('autoprefixer')()
  ]
}

目前我的 package.json 持有我的browserslist选项

正如您所看到的,我已尝试使用webpack文件来保存postcss-loader的配置设置,并且我还尝试创建单独的配置文件。

我已经尝试过移动浏览器列表,但我不认为这是我运行npx browserslist的问题,我可以看到已选择的浏览器列表。

我的webpack配置中的postcss-loader声明在css-loader之后和sass-loader

之前发出

当我运行webpack时,我的控制台也没有收到任何错误,所以不确定发生了什么,但真的可以使用一些帮助!

4 个答案:

答案 0 :(得分:16)

不起作用,{ browsers: ['defaults']}

尝试:

     {
        test: /\.css$/,
        use: [
            MiniCssExtractPlugin.loader,
            'css-loader?modules&importLoaders=1&localIdentName=[local]_[hash:base64:6]',
            {
                loader: 'postcss-loader',
                options: {
                    plugins: () => [require('autoprefixer')({
                        'browsers': ['> 1%', 'last 2 versions']
                    })],
                }
            },
        ]
    }

// postcss.config.js

module.exports = {
    plugins: [
        require('autoprefixer')({
            'browsers': ['> 1%', 'last 2 versions']
        })
    ]
};

答案 1 :(得分:10)

这里的大局是您实际上缺少环境中的Autoprefixer软件包,因此要解决此问题,您有两种解决方法:

解决方案1 ​​

npm install --save-dev postcss-loader autoprefixer

现在在 postcss.config.js 文件中,您可以添加以下内容:

module.exports = {
  plugins: [
    require('autoprefixer')({
      'browsers': ['> 1%', 'last 2 versions']
    })
  ]
};

解决方案2(推荐)

此包来自PostCSS Loader documentation,由于您正在使用此软件包,所以这也许是推荐的方法。

  

postcss-preset-env 包含 autoprefixer ,因此单独添加它是   如果您已经使用了预设,则不需要。

如您所见,为了获得Autoprefixer,您只需要安装PostCSS Preset Env

npm install --save-dev postcss-loader postcss-preset-env

现在摆脱您的 postcss.config.js 文件,并将该配置移至您的 webpack.config.js 中,使其看起来像这样:

...
rules: [
  {
    test: /\.(sa|sc|c)ss$/,
    use: [
      MiniCssExtractPlugin.loader,
      { loader: "css-loader", options: {} },
      {
        loader: "postcss-loader",
        options: {
          ident: 'postcss',
          plugins: [
            require('autoprefixer')({
              'browsers': ['> 1%', 'last 2 versions']
            }),
          ]
        }
      },
      { loader: "sass-loader", options: {} }
    ]
  }
]
...

我希望这会有所帮助,我也花了很长时间才弄清楚;)

答案 2 :(得分:2)

尝试像这样编辑

webpack.config.js:

{
            test: /\.scss$/,
            use: [
                "style-loader", "css-loader", 'postcss-loader', 'resolve-url-loader', 'sass-loader?sourceMap'
            ]
        },

postcss.config.js:

require('autoprefixer')({browsers: ['last 10 versions']}),

答案 3 :(得分:0)

如上所述,您需要指定浏览器列表。 但是,您可以将以下代码添加到依赖项后的webpack.config,而不是将其添加到postcss-configpackage.json。为我工作。

"browserslist": [
  "> 1%",
  "last 2 versions"
],