前言
postcss 是一个通过 JavaScript 来转换样式的工具。它在使用上与 less 和 node-sass 类似,可直接对 css 进行添加浏览器前缀等处理,将其转为可兼容的 css 代码。
它工作时将根据 browserslist 所指定的兼容浏览器范围进行代码转换。对于 browserslist 的说明,可以参考 browserslist及其使用。
环境准备
1 | npm i postcss postcss-cli autoprefixer -D |
上面安装的三个包分别为:
- postcss: 最基本的 css 解析器,但除了解析功能以外啥都干不了,想实现功能需要其他插件帮助。
- postcss-cli:postcss 不允许像
browserslist那样直接在终端中使用,如需使用则需要借助postcss-cli工具。 - autoprefixer:用于根据浏览器兼容性对 css 属性进行添加前缀等行为。
食用方式
这里有 ./src/css/test.css:
1 | .example { |
此时的 .browserlistrc 配置为:
1 | >1% |
自动添加前缀
下面的语句可以将上面的 css 文件进行解析,解析结果被放在同级的 ret.css 中。
1 | npx postcss --use autoprefixer -o ./src/css/ret.css ./src/css/test.css |
./src/css/ret.css:
1 | .example { |
postcss-preset-env
上面的示例中可以发现一个问题:作为 color 属性的新写法 hex-color,不少浏览器并没有对此进行兼容,但在上面的示例中 postcss 并没有对该属性进行处理。
其实对于 Postcss,有各式各样的插件来使其完成各种功能,对于 color 这种我们应该同时使用另一个插件,但这样似乎操作过于繁琐了而且容易遗漏。因此便有了一个整合了所有基本功能的插件 postcss-preset-env。
1 | npm i postcss-preset-env -D |
与 autoprefixer 使用方式完全相同,我们对处理指令进行一些修改
1 | npx postcss --use postcss-preset-env -o ./src/css/ret.css ./src/css/test.css |
./src/css/ret.css:
1 | .example { |
这样便实现了我们所需要的功能。
webpack 中使用 postcss
在 webpack 中,postcss 的加载器为 postcss-loader,此时仅需要安装 postcss-loader,不需要安装 postcss 与 postcss-cli。
尽管该加载器与 sass-loader 和 less-loader 类似,在内部依赖一个工具解析,在这里为 postcss。但不同的是,postcss-loader 已经内部安装了 postcss,不需要我们再额外去安装。而 postcss-cli 仅用于以命令方式交互使用 postcss, 因此也不需要安装。
1 | npm i postcss-loader -D |
由于 postcss 的工作原理是对 css 代码进行解析,得到兼容后的 css 代码,不难理解 postcss-loader 该放置的位置。
1 | module.exports = { |
但这样其实是不会起任何作用的。我们知道 postcss 除了解析 css 代码以外是什么也做不了的,想实现功能还需要使用插件。下面将会讲解插件的加载方法。
插件的配置方法
插件的种类很多,这里还是使用集合了所有基本功能的插件 postcss-preset-env 。
1 | npm i postcss-preset-env -D |
使用插件后,也就不能像其他 loader 那样简单配置了,而是需要在 options 中进行相应配置。不同的 loader 有不同的配置方法,可以参考各自的官方文档。
1 | const postcssPresetEnv = require( "postcss-preset-env" ); |
上面的 postcss-preset-env 其实可以直接在 plugins 数组中以字符串 "postcss-preset-env" 形式编写,但并不是所有的插件都可以这样,需要参考各插件官网文档给予的支持说明。
postcss.config.js
上述配置方式可以发现一个问题,postcss-loader 的配置代码相对比较繁琐,但同样的代码却需要在 css、less、sass 多个地方进行配置,代码非常繁琐臃肿。
同时,使用交互命令执行时,--use 参数每次都要输入也让人厌烦。便有了 postcss.config.js 配置文件。
在项目根目录下创建 postcss.config.js,输入以下内容。
1 | const PostcssPresetEnv = require( "postcss-preset-env" ); |
配置好后就可以优化交互指令或 webpack 配置文件的内容了。
指令方式
此时可以省略 --use 参数。
1 | npx postcss -o ./src/css/ret.css ./src/css/postcss.css |
webpack
此时可以将 postcss-loader 改为简写模式。
1 | module.exports = { |