Настроил webpack + postcss/autoprefixer/cssnano на плагине mini-css-extract-plugin, выдержка из webpack.config.js:
{
test: /\.((s[ac]|c)ss)$/,
use: [
plugins.extractCSS.loader,
{
loader: 'css-loader',
options: {
sourceMap: !isProduction
}
},
{
loader: 'postcss-loader',
options: {
ident: 'postcss',
sourceMap: !isProduction,
plugins: (() => {
return isProduction ? [
require('autoprefixer')(),
require('cssnano')({
preset: ['default', {
minifySelectors: false
}]
})
] : []
})()
}
},
{
loader: 'sass-loader',
options: {
outputStyle: 'expanded',
sourceMap: !isProduction
}
}
]
}
SCSS на входе:
.test_1 {
color: red;
}
.test_2 {
color: green;
}
body {
.test_3 {
color: red;
}
.test_4 {
color: red;
}
.test_5 {
color: green;
}
}
CSS на выходе:
.test_1 {
color: red
}
.test_2 {
color: green
}
body .test_3, body .test_4 {
color: red
}
body .test_5 {
color: green
}
Но если практично посмотреть на классы и их свойства, то можно оптимизировать и их, например так:
.test_1, body .test_3, body .test_4 {
color: red
}
.test_2, body .test_5, {
color: green
}
Вопросы:
То что вы хотите сделать при помощи cssnano называется mergeidents.
Судя по документации, вам нужна advanced версия.
Если вы хотите оптимизировать CSS для скорости загрузки для production то лучше использовать весь арсенал оптимизации (удаление пробелов и табов, сведение селекторов и свойств, конвертация gzip). Если же это компиляция для dev окружения то данная оптимизация будет создавать небольшой дискомфорт при работе из отладчика браузера.
Эта оптимизация включена по умолчанию в advanced версию
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости