手把手教你webpack3(11)PostCSS-Loader配置简述

POSTCSS-LOADER配置简述

前注:

文档全文请查看 根目录的文档说明

如果可以,请给本项目加【Star】和【Fork】持续关注。

有疑义请点击这里,发【Issues】。

DEMO地址

1、概述

postcss-loader 用于处理css代码,具有下列特点:

  1. 通常由 optionsplugins 两部分组成,plugins 虽然嵌套在 options 里,但实际上是通过其他插件生效的;
  2. 配置是可以独立的(每个配置的插件也是独立的)。详细介绍阅读【2.1】;

还有一些自定义配置,但由于篇幅所限,这里就不像之前那样详解每个配置了(主要是很多都依赖于其他东西)。

只写一些常用功能。

2、配置

2.1、独立配置

所谓独立配置,指的是在js文件中,引入的css文件如何被postcss-loader解析,取决于和他最近的那一个postcss的设置文件。

注:

对在css文件中,通过@import导入的css文件无效:

  1. 必须是通过通过import引入到js里面的css文件,才会被postcss-loader解析生效;
  2. 如果是a.css,通过@import './b.css'引入b.css文件,那么该配置对a.css生效,对b.css无效;
  3. 我查了很多资料,目前没找到能让postcss-loader对在css文件中,通过@import方式导入其他的css文件,进行生效的方法。如果有,请提 issues 给我。

优先级:

  1. webpack.config.js 中的module.rules属性里设置的优先级最高;
  2. 然后按顺序找,离css文件最近的postcss.config.js配置文件,遇见的第一个文件其次;
  3. 按顺序找的后面的文件优先级最低;
  4. 找不到配置会报错;

注(完)

先假设 webpack.config.js 里配置方式如下(无任何特殊配置):

// ...略略略
{
    test: /\.css$/,
    use: [
        'style-loader',
        'css-loader',
        'postcss-loader'
        ]
}
// ...略略略              

简单来说,postcss-loader 的配置文件名为:postcss.config.js

假设文件树结构如下:

.
|____app.js
|____webpack.config.js
|____index.html
|____postcss.config.js    // 1#设置文件
|____style
| |____postcss.config.js    // 2#设置文件
| |____style.css
|____style2
| |____bar.css
| |____postcss.config.js    // 3#设置文件

引用(import)结构是:

  1. app.js -> style/style.css
  2. app.js -> style2/bar.css

假如两个css文件都有一条css属性:box-sizing: border-box;

然后 style/postcss.config.js (2#)的设置如下(兼容性配置):

module.exports = {
    plugins: [
        require('autoprefixer')({
            browsers: [
                // 加这个后可以出现额外的兼容性前缀
                "> 0.01%"
            ]
        })
    ]
}

style2/postcss.config.js (3#)的设置如下(默认配置):

module.exports = {}

经过postcss-loader的处理之后,有兼容性配置的css文件,其插入html文件后,css属性变为如下:

-webkit-box-sizing: border-box;
   -moz-box-sizing: border-box;
        box-sizing: border-box;

无兼容性配置的css文件,其插入html文件后,css属性变为如下:

box-sizing: border-box;

说明一点,对于postcss-loader来说,他优先取同目录下的postcss.config.js的配置属性。

另外,由于2#和3#设置文件的存在,因此无论1#如何设置,都不会影响其效果。

假如css文件找不到同目录下的postcss.config.js文件,那么会依次往上级目录寻找,直到找到,或者抵达项目根目录为止(以上面这个目录结构为例,即webpack.config.js所在目录是根目录)

2.2、自定义配置文件路径

名称 类型 默认值 描述
config {Object} undefined Set postcss.config.js config path && ctx

在上面,我们写了postcss-loader的配置文件的使用方式,分别是:【写在webpack.config.js中】,【配置文件放在对应的css文件的同级目录或者上级目录】。

但是假如我们需要统一管理 postcss-loader 的配置文件,那么就需要通过 config 来处理。

示例代码如下:

{
    loader: 'postcss-loader',
    options: {
        config: {
            path: './config'    // 写到目录即可,文件名强制要求是postcss.config.js
        }
    }
}

表示会去 webpack.config.js 的同目录下去找文件夹 config,然后在该文件夹下找到 postcss.config.js 文件(文件名不能改变),从而读取配置。

假如这么写,会导致【放在对应的css文件,的同级目录或者上级目录,的postcss-loader的配置文件失效】。原因是优先级问题。

除此之外,还有一个context设置,略略略。

2.3、sourceMap

测试后,无效(开启与否文件大小不变)

3、插件

除了 autoprefixer 用于加兼容性前缀,其他基本都有更好的,比如stylelint不如用eslint系列替代。

3.1、autoprefixer

这个是最应该添加的插件了。

效果是对css文件添加兼容性前缀。

安装:

npm install autoprefixer --save

官方github地址:

https://github.com/postcss/autoprefixer

使用方式:

// postcss.config.js
let autoprefixer = require('autoprefixer');

module.exports = {
    plugins: [
        autoprefixer({
            browsers: [
                // 加这个后可以出现额外的兼容性前缀
                "> 0.01%"
            ]
        })
    ]
}

效果:

应该是兼容性最强的配置方法了,例如box-sizing可以添加两个前缀,有些特性可以添加三个前缀,如下:

转换前

transform: rotate(0deg);

转换后:

-webkit-transform: rotate(0deg);
   -moz-transform: rotate(0deg);
     -o-transform: rotate(0deg);
        transform: rotate(0deg);
名称 类型 默认值 描述

其他特性:

不仅可以添加前缀,也可以删除旧前缀(过时前缀)等。详细查看官方文档。

非特殊要求,直接使用上面这个配置就行了(如果不需要最多的前缀,可以把上面的改为

autoprefixer({
            browsers: [
                // 加这个后可以出现额外的兼容性前缀
                "> 1%"
            ]
        })

3、参考文章

PostCSS配置指北

时间: 2024-10-04 19:36:28

手把手教你webpack3(11)PostCSS-Loader配置简述的相关文章

手把手教你搭建SpringMVC——最小化配置

为什么需要Spring MVC 最开始接触网页的时候,是纯的html/css页面,那个时候还是用Dreamweaver来绘制页面. 随着网站开发的深入,开始学习servlet开发,记得最痛苦的就是servlet返回网页的内容是字符串拼接的html页面,整不好就无法显示.... 再到后来开学学习SSH,庞大的架构眼花缭乱.Struts繁杂的标签.hibernate搞不清楚的数据表,Spring不知道哪里搞错的bean. 最后随着发展,前端开始占有一席之地,nodejs风生水起,很多业务逻辑开始前置

手把手教你webpack3(8)url-Loader配置简述

URL-LOADER配置简述 前注: 文档全文请查看 根目录的文档说明. 如果可以,请给本项目加[Star]和[Fork]持续关注. 有疑义请点击这里,发[Issues]. DEMO地址 1.概述 简单来说,url-loader的效果类似file-loader. 优点: 可以将css文件中的图片链接,转为base64字符串,或移动到打包后文件夹: 缺点: 可配置性比file-loader弱一些,但其实file-loader的那些配置,一般也用不到. 2.配置 2.1.limit 名称 类型 默认

手把手教你webpack3(10)Less-Loader配置简述

LESS-LOADER配置简述 前注: 文档全文请查看 根目录的文档说明. 如果可以,请给本项目加[Star]和[Fork]持续关注. 有疑义请点击这里,发[Issues]. DEMO地址 1.概述 less-loader 用于处理编译 .less 文件,将其转为 css文件代码. 使用 less-loader 的话,必须安装 less,单独一个 less-loader 是没办法正常使用的. 安装 npm install --save less-loader less 2.配置 2.1.无任何配

手把手教你webpack3(9)File-Loader配置简述

FILE-LOADER配置简述 前注: 文档全文请查看 根目录的文档说明. 如果可以,请给本项目加[Star]和[Fork]持续关注. 有疑义请点击这里,发[Issues]. DEMO地址 1.概述 简单来说,file-loader 就是将文件(由于一般是图片文件为主,所以下面通常使用图片两字作为替代,方便理解.其他的包括字体文件等),在进行一些处理后(主要是处理文件名和路径),移动打包后的目录中. 处理的内容包括: 文件名的处理,比如加 [hash] : 路径的处理,比如[把图片文件统一放到i

手把手教你webpack3(6)css-loader详细使用说明

CSS-LOADER配置详解 前注: 文档全文请查看 根目录的文档说明. 如果可以,请给本项目加[Star]和[Fork]持续关注. 有疑义请点击这里,发[Issues]. 1.概述 对于一般的css文件,我们需要动用三个loader(是不是觉得好麻烦): 1.css-loader: 先附上官网文档(中文)的链接:css-loader文档. 不过说实话,这个官方文档讲的很糟糕,看的人一脸懵逼. css-loader主要用于处理图片路径(其实也包括例如导入css文件的路径),并且会将css样式打包

手把手教你webpack3(7)style-loader详细使用说明

STYLE-LOADER详细使用说明 前注: 文档全文请查看 根目录的文档说明. 如果可以,请给本项目加[Star]和[Fork]持续关注. 有疑义请点击这里,发[Issues]. DEMO地址 1.概述 简单来说,style-loader是将css-loader打包好的css代码以<style>标签的形式插入到html文件中. 对于简单项目,打包然后插入也就足够了,但是遇见复杂情况,例如: 需要使用webpack的服务器热加载服务进行特殊配置: 对css文件二次处理(更改类名,添加额外css

手把手教你webpack3(5)babel-loader详细使用说明

前注: 文档全文请查看 根目录的文档说明. 如果可以,请给本项目加[Star]和[Fork]持续关注. 有疑义请点击这里,发[Issues]. 5.1.babel-loader 这个用于将使用ES6规范的js代码,转为ES5. 首先安装一大堆东西,参照下面的命令,一共是4个(包括webpack) npm install --save babel-loader babel-core babel-preset-env webpack 创建babel规则文件.babelrc,内容设置为: { "pre

手把手教你webpack3(1)最简单的webpack实例

0.前注 本文内容源于webpack中文文档,以及我自己实践中写的若干DEMO. 每个DEMO以文件夹为单位,从入门到进阶,根据文件夹编号为准,逐步递进. 成文时,webpack版本是[3.8.1] 0.1.安装webpack 首先你需要安装Node.js,点击打开Node.js下载页面.安装完Node.js后,会自带npm包管理器. npm install webpack -g 这个命令将安装最新版本的webpack(全局,学习教程中推荐,避免多次安装.但实践中还是有必要一个项目一个webpa

手把手教你webpack3(4)出口(详解)

前注: 文档全文请查看 根目录的文档说明. 如果可以,请给本项目加[Star]和[Fork]持续关注. 有疑义请点击这里,发[Issues]. 4.出口 示例目录 4.1.标准的出口写法 // 出口文件 output: { filename: './dist/dist.js' } 意思是,将打包好的文件,打包到dist文件夹下的dist.js. 注: 大家一般将打包好的文件会放在dist文件夹下,方便管理. 4.2.出口文件名根据入口文件名所决定: 上面讲了多入口,以及对应的多出口的配置写法,可