mini-css-extract-plugin 提取的 CSS 顺序为什么乱了?
我用 mini-css-extract-plugin 把样式抽离成单独的 CSS 文件,但发现最终生成的 CSS 顺序和我 import 的顺序不一致,导致样式覆盖出问题。明明我是先引入 reset.css 再引入 main.css 的,结果 main 的样式反而被 reset 覆盖了。
我的 webpack 配置里是这么写的:
module.exports = {
module: {
rules: [
{
test: /.css$/,
use: [MiniCssExtractPlugin.loader, 'css-loader']
}
]
},
plugins: [new MiniCssExtractPlugin({ filename: 'styles.css' })]
};
是不是 loader 处理顺序的问题?还是插件本身不保证顺序?求解!
要保证样式顺序正确,最简单的方式是确保 reset.css 真正作为基础样式被优先处理。建议这样调整:
记得安装 postcss-import 插件。这个插件会按照你在 JS 里面 import 样式的顺序来处理文件,从根本上解决样式覆盖问题。
另外提醒一句,CSS 的 specificity 也很重要,有时候即使顺序对了,权重更高的选择器还是会覆盖前面的样式。写样式时多注意这点,能减少不少麻烦。