Я использую Laravel Mix и Webpack для предварительной обработки SASS.
У меня есть две «темы» на моем веб-сайте, которые я хочу сделать компактными, наследуя переменные там, где они нужны. Например, моя основная тема будет включать в себя в следующем порядке:
// Primary theme
@import "./primary-variables.scss";
@import "/path/to/default/theme/main.scss";
Моя тема по умолчанию будет выглядеть так:
// Default theme
@import "./default-variables.scss";
@import "~bootstrap-sass/assets/stylesheets/_bootstrap";
Как и в этом вопросе, я сначала включил основные переменные, а затем переменные темы по умолчанию, затем бутстрап в последнюю очередь.
В моей теме по умолчанию я добавляю !default
ко всем переменным, поэтому там, где они переопределяют Bootstrap, они будут использоваться в приоритете, а там, где они новые, они будут значением по умолчанию. Основная тема вообще не использует !default
.
Рабочий пример
Если Bootstrap определяет $brand-danger
как, скажем, red !default
, моя тема по умолчанию переопределяет его как blue !default
, а моя основная тема переопределяет его как yellow
, мой отображаемый вывод будет желтым — отлично!
Эта проблема
Когда мне нужно ссылаться на переменные, которые определены только на других уровнях моей основной темы. Например:
// Primary theme:
// This fails since I haven't defined $brand-primary in my primary theme
$my-primary-theme-variable: $brand-primary;
Теперь сборка завершается с ошибкой primary-theme/src/scss/main.scss doesn't export content
.
Обходной путь
Я могу обойти эту проблему, скопировав весь файл переменных Bootstrap в мою основную тему и изменив переменные по мере необходимости, но я действительно не хочу этого делать.
Вопрос
Как на самом деле работает процессор переменных SASS? Могу ли я просто изменить одну из переменных Bootstrap в моей теме без необходимости переопределять весь файл?
Этот вопрос очень похож.