PostCSS 安装与配置 #
安装 PostCSS #
方式一:npm 安装(推荐) #
bash
# 项目本地安装
npm install postcss --save-dev
# 安装常用插件
npm install autoprefixer postcss-cli --save-dev
# 验证安装
npx postcss --version
方式二:全局安装 #
bash
# 全局安装 CLI
npm install postcss-cli autoprefixer --global
# 验证安装
postcss --version
方式三:使用 Yarn #
bash
# 项目本地安装
yarn add postcss autoprefixer postcss-cli --dev
# 全局安装
yarn global add postcss-cli autoprefixer
方式四:使用 pnpm #
bash
# 项目本地安装
pnpm add postcss autoprefixer postcss-cli --save-dev
# 全局安装
pnpm add -g postcss-cli autoprefixer
配置文件 #
PostCSS 支持多种配置文件格式,按优先级从高到低:
1. postcss.config.js(推荐) #
javascript
// postcss.config.js
module.exports = {
plugins: [
require('autoprefixer')({
overrideBrowserslist: ['> 1%', 'last 2 versions']
}),
require('cssnano')({
preset: 'default'
})
]
}
2. postcss.config.cjs(ES Module 项目) #
javascript
// postcss.config.cjs
module.exports = {
plugins: [
require('autoprefixer'),
require('cssnano')
]
}
3. postcss.config.mjs #
javascript
// postcss.config.mjs
import autoprefixer from 'autoprefixer'
import cssnano from 'cssnano'
export default {
plugins: [
autoprefixer,
cssnano
]
}
4. .postcssrc.js #
javascript
// .postcssrc.js
module.exports = {
plugins: {
autoprefixer: {
overrideBrowserslist: ['> 1%', 'last 2 versions']
},
cssnano: {}
}
}
5. .postcssrc.json #
json
{
"plugins": {
"autoprefixer": {
"overrideBrowserslist": ["> 1%", "last 2 versions"]
},
"cssnano": {}
}
}
6. .postcssrc.yml #
yaml
plugins:
autoprefixer:
overrideBrowserslist:
- "> 1%"
- "last 2 versions"
cssnano: {}
7. package.json #
json
{
"postcss": {
"plugins": {
"autoprefixer": {},
"cssnano": {}
}
}
}
配置文件查找顺序 #
PostCSS 按以下顺序查找配置文件:
text
1. postcss.config.js
2. postcss.config.cjs
3. postcss.config.mjs
4. postcss.config.ts
5. .postcssrc
6. .postcssrc.js
7. .postcssrc.cjs
8. .postcssrc.mjs
9. .postcssrc.ts
10. .postcssrc.json
11. .postcssrc.yml
12. .postcssrc.yaml
13. package.json (postcss 字段)
高级配置 #
环境区分 #
javascript
// postcss.config.js
const isProduction = process.env.NODE_ENV === 'production'
module.exports = {
plugins: [
require('autoprefixer'),
// 只在生产环境压缩
isProduction && require('cssnano')({
preset: 'default'
})
].filter(Boolean)
}
函数式配置 #
javascript
// postcss.config.js
module.exports = (ctx) => {
return {
plugins: [
require('autoprefixer')({
// 根据环境变量配置
overrideBrowserslist: ctx.env === 'production'
? ['> 1%', 'last 2 versions']
: ['last 1 chrome version']
}),
require('postcss-preset-env')({
stage: ctx.env === 'production' ? 2 : 0
})
]
}
}
多配置支持 #
javascript
// postcss.config.js
module.exports = {
plugins: [
require('autoprefixer')
],
// 针对不同文件类型
map: {
inline: false,
annotation: true
}
}
文件匹配配置 #
javascript
// postcss.config.js
module.exports = {
plugins: [
require('autoprefixer')
],
// 排除特定文件
exclude: 'node_modules/**'
}
与构建工具集成 #
Webpack 集成 #
安装 #
bash
npm install postcss-loader --save-dev
配置 #
javascript
// webpack.config.js
module.exports = {
module: {
rules: [
{
test: /\.css$/,
use: [
'style-loader',
'css-loader',
'postcss-loader'
]
},
{
test: /\.scss$/,
use: [
'style-loader',
'css-loader',
'postcss-loader',
'sass-loader'
]
}
]
}
}
内联配置 #
javascript
// webpack.config.js
module.exports = {
module: {
rules: [
{
test: /\.css$/,
use: [
'style-loader',
'css-loader',
{
loader: 'postcss-loader',
options: {
postcssOptions: {
plugins: [
require('autoprefixer'),
require('cssnano')
]
}
}
}
]
}
]
}
}
Vite 集成 #
Vite 内置 PostCSS 支持,只需创建配置文件:
javascript
// postcss.config.js
module.exports = {
plugins: [
require('autoprefixer'),
require('cssnano')({
preset: 'default'
})
]
}
Vite 配置 #
javascript
// vite.config.js
import { defineConfig } from 'vite'
export default defineConfig({
css: {
postcss: {
plugins: [
require('autoprefixer')
]
}
}
})
Gulp 集成 #
安装 #
bash
npm install gulp-postcss --save-dev
配置 #
javascript
// gulpfile.js
const gulp = require('gulp')
const postcss = require('gulp-postcss')
const autoprefixer = require('autoprefixer')
const cssnano = require('cssnano')
gulp.task('css', () => {
const plugins = [
autoprefixer(),
cssnano()
]
return gulp.src('src/*.css')
.pipe(postcss(plugins))
.pipe(gulp.dest('dist'))
})
gulp.task('watch', () => {
gulp.watch('src/*.css', gulp.series('css'))
})
Rollup 集成 #
安装 #
bash
npm install rollup-plugin-postcss --save-dev
配置 #
javascript
// rollup.config.js
import postcss from 'rollup-plugin-postcss'
export default {
input: 'src/index.js',
output: {
file: 'dist/bundle.js',
format: 'iife'
},
plugins: [
postcss({
plugins: [
require('autoprefixer'),
require('cssnano')
]
})
]
}
Parcel 集成 #
Parcel 自动支持 PostCSS,只需创建配置文件:
javascript
// .postcssrc
{
"plugins": {
"autoprefixer": {}
}
}
Next.js 集成 #
Next.js 内置 PostCSS 支持:
javascript
// postcss.config.js
module.exports = {
plugins: {
autoprefixer: {},
cssnano: {} // 仅在生产环境
}
}
Nuxt.js 集成 #
javascript
// nuxt.config.js
export default {
build: {
postcss: {
plugins: {
autoprefixer: {}
}
}
}
}
常用插件安装 #
基础插件 #
bash
# 自动添加浏览器前缀
npm install autoprefixer --save-dev
# CSS 压缩
npm install cssnano --save-dev
# 使用未来 CSS 特性
npm install postcss-preset-env --save-dev
开发增强插件 #
bash
# 嵌套语法
npm install postcss-nested --save-dev
# 变量支持
npm install postcss-simple-vars --save-dev
# Mixin 支持
npm install postcss-mixins --save-dev
# 导入支持
npm install postcss-import --save-dev
功能增强插件 #
bash
# px 转 rem
npm install postcss-pxtorem --save-dev
# CSS 雪碧图
npm install postcss-sprites --save-dev
# RTL 支持
npm install rtlcss --save-dev
配置示例 #
最小配置 #
javascript
// postcss.config.js
module.exports = {
plugins: [
require('autoprefixer')
]
}
开发环境配置 #
javascript
// postcss.config.js
module.exports = {
plugins: [
require('postcss-import'),
require('postcss-nested'),
require('postcss-simple-vars'),
require('autoprefixer')
]
}
生产环境配置 #
javascript
// postcss.config.js
module.exports = {
plugins: [
require('postcss-import'),
require('postcss-nested'),
require('postcss-simple-vars'),
require('autoprefixer'),
require('cssnano')({
preset: ['default', {
discardComments: {
removeAll: true
}
}]
})
]
}
完整配置示例 #
javascript
// postcss.config.js
const isDev = process.env.NODE_ENV !== 'production'
module.exports = {
plugins: [
// 导入处理
require('postcss-import')({
path: ['src/styles']
}),
// 变量
require('postcss-simple-vars')({
variables: {
primary: '#007bff',
secondary: '#6c757d'
}
}),
// 嵌套
require('postcss-nested'),
// Mixin
require('postcss-mixins'),
// 自动前缀
require('autoprefixer')({
overrideBrowserslist: [
'> 1%',
'last 2 versions',
'not dead'
]
}),
// 未来特性
require('postcss-preset-env')({
stage: 2,
features: {
'nesting-rules': true
}
}),
// 生产环境压缩
!isDev && require('cssnano')({
preset: 'default'
})
].filter(Boolean)
}
Source Map 配置 #
javascript
// postcss.config.js
module.exports = {
plugins: [
require('autoprefixer')
],
// 开启 source map
map: {
inline: false, // 不内联
annotation: true, // 生成注释
sourcesContent: true // 包含源内容
}
}
浏览器兼容性配置 #
browserslist 配置 #
创建 .browserslistrc 文件:
text
# .browserslistrc
> 1%
last 2 versions
not dead
not ie 11
或在 package.json 中配置:
json
{
"browserslist": [
"> 1%",
"last 2 versions",
"not dead"
]
}
不同环境配置 #
json
{
"browserslist": {
"production": [
"> 1%",
"last 2 versions"
],
"development": [
"last 1 chrome version",
"last 1 firefox version"
]
}
}
验证配置 #
CLI 验证 #
bash
# 处理单个文件
npx postcss input.css -o output.css
# 查看详细输出
npx postcss input.css -o output.css --verbose
# 开启 source map
npx postcss input.css -o output.css --map
Node.js 验证 #
javascript
// test.js
const postcss = require('postcss')
const autoprefixer = require('autoprefixer')
const css = `
.button {
display: flex;
user-select: none;
}
`
postcss([autoprefixer])
.process(css, { from: undefined })
.then(result => {
console.log(result.css)
})
常见问题 #
配置文件不生效 #
bash
# 检查配置文件位置
ls -la postcss.config.js
# 检查语法
node -e "console.log(require('./postcss.config.js'))"
# 清除缓存
rm -rf node_modules/.cache
插件顺序问题 #
javascript
// 错误:cssnano 在前
module.exports = {
plugins: [
require('cssnano'), // ❌ 应该在最后
require('autoprefixer')
]
}
// 正确:cssnano 在后
module.exports = {
plugins: [
require('autoprefixer'),
require('cssnano') // ✅ 压缩应该在最后
]
}
与 CSS 预处理器冲突 #
javascript
// postcss.config.js
module.exports = {
plugins: [
// 只使用兼容性插件,避免与 Less/Sass 功能重复
require('autoprefixer'),
require('postcss-preset-env')({
stage: 2
})
]
}
下一步 #
现在你已经完成了 PostCSS 的安装与配置,接下来学习 基本使用 开始实际编写!
最后更新:2026-03-28