为什么PostCSS处理@custom-media时报Unknown word错误?
我在用PostCSS处理CSS时遇到问题,当写@custom-media和CSS变量时,编译总报Unknown word错误。已经装了postcss-preset-env和autoprefixer。
配置文件是这样写的:
module.exports = {
plugins: {
'postcss-preset-env': {},
autoprefixer: {}
}
};
尝试过把@custom-media改成@media就正常了,但项目需要动态媒体查询。查了文档说是需要特定插件,但按网上的教程配了还是不行。
@custom-media语法,虽然你用了 postcss-preset-env,但它默认的 stage 配置可能没开到支持实验性语法。@custom-media属于比较新的 CSS 规范,需要明确启用。postcss-preset-env 默认只处理 stage 2+ 的特性,而 custom media 查询在早期是 stage 3,但实际使用时经常因为 parser 解析不到直接报 “Unknown word”。解决方法很简单:修改配置,显式开启
features或调整stage。改成这样:
重点是加上
features: { 'custom-media-queries': true },这样强制启用 custom media 支持。有时候光靠 stage 3 也不保险,插件层面得打个补丁。另外确认一下你用的 postcss-preset-env 版本,老版本(比如 6.x 以下)对 custom-media 支持不完整,建议升级到最新版:
顺便提一句,这类问题服务端构建流程最容易踩坑,本地开发能跑不代表 CI 能过,版本一乱就炸。建议锁版本 + 提前在 pipeline 验证。