PostCSS插件在Webpack配置中没生效怎么办?
我按文档给Webpack加了postcss-loader和autoprefixer,但CSS里写@import还是报错说无法解析。装了postcss-import后配置也写了,重启服务器也不行。
配置是这样的:
module.exports = {
module: {
rules: [{
test: /.css$/,
use: ['style-loader', 'css-loader', 'postcss-loader']
}]
}
}
postcss.config.js也写了:
module.exports = {
plugins: {
'autoprefixer': {},
'postcss-import': {}
}
}
控制台提示”Can’t resolve ‘./variables.css’ in ‘styles'”,路径明明是对的啊,是不是加载顺序有问题?
postcss-import必须在其他插件之前执行,不然它处理不了@import语句。你的配置写法有点问题,改成数组形式会更靠谱。试试这样改你的
postcss.config.js:然后 Webpack 配置里,确保
postcss-loader的顺序是对的,你现在的写法没问题,但最好明确一下选项:另外,路径问题也可能是
css-loader的配置不对,默认情况下它不会处理相对路径的@import。给css-loader加个选项试试:最后提醒一句,别忘了检查你的 CSS 文件是不是真的在正确的位置,路径拼写有没有手抖写错。我以前就因为多打了个点浪费了半小时,真是又气又好笑。
改完重启一下服务器,应该就没问题了。如果还不行,可能是版本兼容性问题,看看你的
postcss-loader和webpack版本是不是匹配,尤其是 Webpack 5 和旧版插件容易出幺蛾子。我的做法是调整一下 loader 的执行顺序,把 postcss-import 放到 css-loader 前面。你可以这样改:
把 module.exports 的 rules 改成这样:
use: ['style-loader', 'css-loader', {
loader: 'postcss-loader',
options: {
postcssOptions: {
plugins: {
'postcss-import': {},
'autoprefixer': {}
}
}
}
}]
然后重启一下 dev server,应该就不会报路径错误了。因为 css-loader 会处理 @import 语法,但 postcss-import 需要先于它执行才能正确解析路径。
如果你用了 sass 或 less,还要注意 sass-loader 之类的要放在 postcss-loader 后面,不然也会有问题。这个顺序得排对了才行。