PostCSS卡在Processing CSS主因是插件默认全量解析而非按需工作。如postcss-preset-env重复解析未用特性,cssnano开启svgo导致内存溢出;需删减开发环境插件、调整顺序、校准importLoaders及配置路径。

为什么 postcss.config.js 里插件一多就卡在 Processing CSS?
PostCSS 本身不慢,慢的是插件链里那些「默认全量开火」的家伙。比如 postcss-preset-env 每次都尝试解析你根本没写的 :is()、color-mix();cssnano 默认开启 svgo 和全量注释删除,遇到内联 SVG 或 source map 就容易内存溢出。它们不是“按需工作”,而是“见 CSS 就扫”,插件越多,重复解析越严重。
常见错误现象:npm run build 卡在 Processing CSS 超过 3 秒;DEBUG=* 日志里反复出现 postcss-preset-env parse 调用,次数远超实际 CSS 文件数;Node 进程 CPU 占满但无进展。
哪些插件该删、该关、该挪位置?
先做减法,再调顺序:
-
postcss-preset-env:开发环境直接删掉——它对日常变量、媒体查询、嵌套基本没用,反而拖慢热更新;只在生产环境需要新特性降级时保留,且必须放在autoprefixer之前 -
cssnano:开发环境禁用;生产环境启用时,显式关闭高开销项:{ svgo: false, discardComments: { removeAllButFirst: true } } -
postcss-import:必须是插件链第一个,否则@layer、&嵌套会被提前扁平化;确认它在postcss-nesting和postcss-layers之前 -
autoprefixer:必须放在最后——它只补前缀,放前面会导致后续插件(如cssnano)误删-webkit-前缀
importLoaders 设错一层,整个链路白优化
这个参数控制的是 @import 进来的文件会经过几个 loader 处理。设错会导致变量不生效、报错或空转:
- loader 链是
[css-loader, postcss-loader]→importLoaders: 1(让被 import 的文件进postcss-loader) - 如果还配了
sass-loader,loader 链变成[css-loader, postcss-loader, sass-loader]→ 必须设importLoaders: 2,否则sass-loader不会处理被 import 的 SCSS - 已弃用
sass-loader却仍设importLoaders: 2,会触发Error: Cannot find module 'sass' - 设成
1但postcss-custom-properties在postcss-loader里靠后,变量就根本不会被解析
路径和配置文件位置错,插件压根不加载
postcss.config.js 生效有硬性前提,缺一不可:
立即学习“前端免费学习笔记(深入)”;
- 文件必须放在 Webpack 入口文件(如
src/index.js)所在目录,或其任意上层目录;放在src/css/或public/下会被忽略 - 必须有有效的
browserslist配置(推荐写在package.json里):"browserslist": ["> 1%", "not dead", "IE 11"];只写"last 1 chrome version"会导致flex不加前缀 - 插件顺序错乱,比如
postcss-nested放在autoprefixer后面,嵌套规则(.a { .b { display: flex; } })就不会展开,前缀也加不上
postcss.config.js 没生效、importLoaders 和 loader 链长度对不上、或者 cssnano 在开发环境偷偷运行。这些点不校准,加再多缓存或升级 Node 版本都没用。


















