Проблема с keepCssVars и componentsTheme в 15.5.2
Closed this issue · 9 comments
При обновлении забыли подтянуть postcss конфиг из версии 15.0.0.
"проблема" звучит очень абстрактно. В 15.0.0 были баги с postcss конфигурацией, поправленные например тут
#64
Про какие именно проблемы идет речь?
@heymdall-legal
Я полагал, что keepCssVars использует медиа переменные из файла (для глобального доступа без импорта) и аналогично переменных из componentsTheme.
После обновления изменился механизм добавления, чтобы не импортировать определения пользовательских свойств в каждый файл используется PostCSS Global Datа, который идет перед custom-properties.
( config.componentsTheme || config.keepCssVars ) && '@csstools/postcss-global-data', config.keepCssVars && 'postcss-custom-media', config.componentsTheme && 'postcss-custom-properties',
Получается keepCssVars не имеет отношения к mq, а медиа запросы по умолчанию добавляются. Верно?
Так. Вообще надо конечно тесты какие то сделать, но я не очень понимаю как. Распишу кейсы, дальше можно будет подумать как сделать так, чтоб оно так и работало, а потом еще и подумать как это тестировать
CSS на входе:
/*style.css*/
@import '~@alfalab/core-components/vars/bundle/corp.css';
.root {
padding: var(--gap-xl);
}
.title {
color: var(--button-accent-base-bg-color);
}
/*node_modules/@alfalab/core-components/button/index.css*/
:root {
--button-accent-base-bg-color: #ef3124;
}
.accent {
background-color: var(--button-accent-base-bg-color);
}
Настройки: keepCssVars: true, componentsTheme: undefined
, выход:
/*main.css*/
:root { /*импорты подтянулись, подтянулось то, что импортировали*/
--gap-xl: 32px;
--button-accent-base-bg-color: #202022;
}
.root {
padding: var(--gap-xl);
}
.title {
color: var(--button-accent-base-bg-color);
}
/*vendor.css*/
:root {
--button-accent-base-bg-color: #ef3124;
}
.accent {
background-color: var(--button-accent-base-bg-color);
}
Настройки keepCssVars: true, componentsTheme: './node_modules/@alfalab/core-components/themes/corp.css'
, выход (в целом это бессмысленно):
/*main.css*/
:root { /*импорты подтянулись, подтянулось то, что импортировали*/
--gap-xl: 32px;
--button-accent-base-bg-color: #202022;
}
.root {
padding: var(--gap-xl);
}
.title {
color: var(--button-accent-base-bg-color);
}
/*vendor.css*/
:root { /*Добавились переменные из темы*/
--gap-xl: 32px;
--button-accent-base-bg-color: #202022;
}
:root {
--button-accent-base-bg-color: #ef3124;
}
.accent {
background-color: var(--button-accent-base-bg-color);
}
Настройки keepCssVars: false, componentsTheme: undefined
:
/*main.css*/
.root {
padding: 32px;
}
.title {
color: #202022; /*значение из файла, который импортировался*/
}
/*vendor.css*/
.accent {
background-color: #ef3124; /*значение из дефолтной темы, то что импортировали в main - не имеет значения*/
}
Настройки keepCssVars: false, componentsTheme: './node_modules/@alfalab/core-components/themes/corp.css'
:
/*main.css*/
.root {
padding: 32px;
}
.title {
color: #202022; /*значение из файла, который импортировался*/
}
/*vendor.css*/
.accent {
background-color: #202022; /*значение из corp темы*/
}
При этом все эти настройки не имееют никакого эффекта на custom-media запросы. Для всех вариантов настроек код типа:
@media (--tablet) {
.root {
padding: 10px;
}
}
Должен превращаться в
@media (min-width:600px) and (max-width:1023px) {
.root {
padding: 10px;
}
}
@heymdall-legal приветствую! Я правильно понимаю, что keepCssVars: false
(postcss-custom-properties: { preserve: false }) означает, что из бандла должны выпилиться вообще все переменные, в том числе из core-components?
да, предполагается что это для случаев, когда css-переменные не поддерживаются. К сожалению все еще есть ряд проектов, в которых надо поддерживать ie11
сейчас получается, что этот параметр не работает. На выходе остаются переменные и причем они дублируются (проблема с дублированием уже скорее решается другим плагином)
Это плагин не решает проблему с дублированием переменных - postcss-discard-duplicates. Чтобы не дублировались root переменные, лучше добавлять тему для глобального доступа global data
сейчас получается, что этот параметр не работает. На выходе остаются переменные и причем они дублируются (проблема с дублированием уже скорее решается другим плагином)
Это плагин не решает проблему с дублированием переменных - postcss-discard-duplicates. Чтобы не дублировались root переменные, лучше добавлять тему для глобального доступа global data
Я про сам параметр keepCssVars, сейчас он не работает как должно работать
Исправлено в arui-scripts
версии 15.7.1