webpack postcss

600 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第27天,点击查看活动详情

postcss

postcss是什么?有什么用?

JavaScript转换样式的工具。让css样式适配不同的浏览器(不用自己去手动的添加了)。

安装postcss

npm i postcss-cli -D

autoprefixer

网址

如下,它将左侧的css进行了多个浏览器版本的兼容。 image.png

postcss使用命令行

新建一个test.css文件,然后在login.js中引用。

image.png

把官网的如下代码复制到test.css

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

新进行一下npm run build编译,然后审查元素发现,我们的test.css的样式加入进来了。但是并没有针对浏览器来进行样式的兼容。比如transition就没有添加前缀为-webkit-transition

image.png 然后我们尝试着用postcss进行处理

-o也就是output 然后我们要输出成的文件 操作的文件

npx postcss -o ret.css ./src/css/test.css

确实是生成了一个新的文件,但是并没有添加前缀。其实postcss是一个独立的工具,本身什么也不能做。他还需要其他插件。

image.png

autoprefixer的使用

首先,不要忘了我们的.browserslistrc。这里是对需要兼容的浏览器版本的一个约束。autoprefixer的编译那,也会根据.browserslistrc来进行编译的。

image.png 安装:

npm i autoprefixer -D

然后使用autoprefixer再次执行postcss,此时可以发现都加上了适配不同浏览器的前缀了。

npx postcss --use autoprefixer -o ret.css ./src/css/test.css

image.png

postcss-loader

我们的项目中,如果需要进行css兼容浏览器的处理,并不可能都去使用命令行去处理。因此就需要loader的处理。

安装postcss-loader,其内部又是使用了postcss的。

npm i postcss-loader -D

webpack.config.js

因为是对样式文件的处理,因此需要加到css文件loader中。并且,对css的兼容是在处理css文件前就执行的。因此顺序是'postcss-loader'在最右边。

 module: {
    rules: [
      {
        // 是一个正则表达式
        test: /\.css$/,
        // 可能有多个loader  执行顺序从右往左  
        use: ['style-loader','css-loader','postcss-loader'],
      },
      {
          test: /\.less$/,
          use:['style-loader','css-loader','less-loader']
      }
    ],
  },

比如要添加前缀,那么postcss本身是不能处理的,需要对其进行一些配置。上面的写法就需要改变。

 module: {
    rules: [
      {
        // 是一个正则表达式
        test: /\.css$/,
        // 可能有多个loader  执行顺序从右往左  
        use: ['style-loader','css-loader',
        {
          loader:'postcss-loader',
          // postcss-loader添加配置
          options:{
          // 配置中使用postcss
            postcssOptions:{
            // postcss配置中使用插件
              plugins:[
              // 使用了autoprefixer插件,进行css前缀的处理
                require('autoprefixer')
              ]
            }
          }
        }],
      },
      {
          test: /\.less$/,
          use:['style-loader','css-loader','less-loader']
      }
    ],
  },

然后此时再执行 npm run build,可以看到css针对不同浏览器的前缀都添加了。

image.png