Я строил библиотеку Angular 6. Новый процесс довольно приятный.
Я беру некоторые модули и их компоненты, которые были написаны в предыдущей версии, и конвертирую их. Эти компоненты были оформлены так, что их вид и стили являются внешними файлами, html и scss соответственно.
Библиотека, над которой я работаю, также содержит глобальные стили, которые выводятся в папку библиотеки с использованием scss-bundler
в процессе сборки. Эти стили не включают в себя ни один из стилей компонента.
Я использовал «базовое» приложение Angular в качестве демонстрационного сайта для компонентов. Опять же, очень приятно, что я могу использовать один репозиторий для создания своей библиотеки и ее демонстрации.
В приложении я импортирую мои глобальные стили из каталога dist библиотеки:
/* VARIABLES */
@import "../dist/vdl-lib/variables";
/* BOOTSTRAP */
@import "../node_modules/bootstrap/scss/bootstrap";
@import "../node_modules/@angular/material/prebuilt-themes/indigo-pink.css";
/* VDL-LIB */
@import "../dist/vdl-lib/styles";
/* DEMO APPLICATION STYLES */
$fa-font-path: "../node_modules/font-awesome/fonts";
@import "../node_modules/font-awesome/scss/font-awesome";
html, body {
height: 100%;
}
Это прекрасно работает, и на данный момент мои компоненты стилизованы правильно и применены глобальные стили макета.
Теперь вот где я сталкиваюсь с проблемой. Причина SCSS в том, чтобы иметь возможность настраивать, верно? В моем компоненте заголовка (расположенном в библиотеке) у меня есть некоторые стили для логотипа:
.header-logo {
display: flex;
align-items: center;
.name-brand {
padding-right: $padding-base;
img {
height: $logo-height;
}
}
}
В styles.scss
(показанном выше) предположим, что я вставил переменное переназначение $logo-height: 68px
непосредственно перед @import "../dist/vdl-lib/styles";
. При запуске приложения размер логотипа компонента не изменяется. Я вижу, что высота установлена равной исходному значению в моем внутреннем scss-файле «переменных».
Это проблема замещения в SCSS или Angular? Это не так! Из того, что я могу сказать, когда библиотека построена, стиль выходного компонента скомпилирован в CSS !
Я пришел к такому выводу, посмотрев в вывод fsm5 js. Я могу найти декораторы для компонента и убедиться, что это CSS.
Я попытался использовать styles
вместо styleUrls
на компонентном декораторе. Я удалил импорт для моих «переменных» scss файлов. Это заставило выходной JavaScript иметь SCSS, но запуск демонстрационного приложения показал, что ни один из стилей компонента не применялся. Я не уверен, есть ли какая-то проблема с упорядочением, которая не позволяет переменным, импортированным в демонстрационном приложении styles.scss
, использоваться в компонентах. Я еще не пробовал определять переменные в angular.json
, но у меня нет особой надежды на это.
Итак, у меня такой вопрос: возможно ли заставить библиотечные компоненты использовать и выводить SCSS, чтобы приложение-потребитель могло настраивать любые переменные макета? Мне не хватает некоторых параметров конфигурации, чтобы сообщить Angular о создании демонстрационного приложения с предположением, что стили в используемой библиотеке являются scss и их необходимо скомпилировать?