@import в заявлении @if в Sass

Я хочу загрузить только CSS, необходимые для страницы входа для повышения производительности. На других моих страницах мне нужен сгруппированный файл css, который будет кэшироваться на каждой странице, содержащей все мои css.

У меня есть следующие файлы:

minifiedcssforloginpage.scss
grouped-pages.scss

В minifiedcssforloginpage.scss объявляю $load-complete-css: false. После этого я импортирую myproject.scss, который содержит все импортные модули, макеты, ядро ​​... В myproject.scss я хочу сделать что-то вроде

@if $load-complete-css {
     @import module1;
     @import module2;
     @import module3;
}

Таким образом, minifiedcssforloginpage.scss генерирует minifiedcssforloginpage.css с меньшим количеством css, затем grouped-pages.css(который имеет значение var $load-complete-css, установленное в true).

Но я получаю сообщение об ошибке, что это невозможно. Директивы импорта не могут использоваться в директивах или миксах управления.

Ответы

Ответ 1

Это одна из тех вещей, которые просто не разрешены. Единственное, что вы можете сделать, это превратить их в mixins (импортировать файл за пределами @if и при необходимости вызвать mixin).

Разъяснение:

_partial.scss

@mixin partial {
    .test { color: red }
    // other styles here
}

styles.scss

@import "partial";
@if $someval == true {
    @include partial;
}

Ответ 2

Основная команда разработчиков неохотно реализует эту функцию, хотя они рассматривают внедрение новой системы зависимостей.


См. Следующие вопросы Github:

Ответ 3

Поместите свои стили в различные частичные файлы таким образом, который имеет смысл для вас. Затем вы можете создать отдельный файл SASS для своей страницы входа, который импортирует только файлы с соответствующими стилями.

Процитировать мой ответ на другой вопрос:

В настоящее время невозможно использовать SASS для динамического включения файлов. @import не может использоваться в директивах управления (например, @if) или mixins, использование переменной в директиве import является ошибочным синтаксисом, и не существует директивы для окончательного завершения файла (что эффективно позволит условный импорт). Однако вы можете решите свою проблему, изменив структуру правил стиля.

... Если у вас есть стили, которые [должны быть] условно включены [они] должен быть инкапсулирован в mixins, в файлах 'module' или 'library'.... Основная идея заключается в том, что импорт одного такого файла не выводит никаких CSS. Таким образом, вы можете импортировать эти файлы избыточно, чтобы вы могли использовать mixins, где бы вы ни нуждались.