【问题标题】:Webpack 4, postcss-loader and autoprefixer pluginWebpack 4、postcss-loader 和 autoprefixer 插件
【发布时间】:2018-09-21 19:05:18
【问题描述】:

试图让 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 时,我的控制台也没有收到任何错误,所以不确定发生了什么,但真的可以使用一些帮助!

【问题讨论】:

    标签: javascript webpack


    【解决方案1】:

    这里的大局是您实际上缺少环境中的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】:

    如上所述,您需要指定浏览器列表。 但是,除了将其添加到您的 webpack.configpostcss-config 之外,您还可以将以下代码简单地添加到依赖项之后的 package.json 中。为我工作。

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

    【讨论】:

      【解决方案3】:

      尝试像这样编辑

      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']}),
      

      【讨论】:

      • 当将浏览器版本从 defaults 更改为任何其他选项时,一切似乎都在工作
      【解决方案4】:

      不工作,但{ 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']
              })
          ]
      };
      

      【讨论】:

      • 我尝试为浏览器列表使用不同的值,但仍然无法正常工作。我认为浏览器列表不是问题,因为我运行 npx browserslist 并且可以看到哪些浏览器应该受到影响。
      • 我试图编辑我之前的评论,但您的回答确实有效!我知道我为浏览器选项尝试了不同的值,但由于某种原因它今天早上可以工作......我想我可能有拼写错误。唯一似乎不起作用的值是 defaults 选项。感谢发帖!
      • 在尝试了其他所有方法后,这也对我有用 +1
      猜你喜欢
      • 2018-05-19
      • 2018-02-25
      • 2019-02-24
      • 2021-01-11
      • 2021-04-18
      • 2018-10-28
      • 2019-05-15
      • 1970-01-01
      • 2021-06-28
      相关资源
      最近更新 更多