dart build: необходимо внедрить ресурс из приложения в пакет зависимостей

Предыстория: у меня есть пакет с компонентами Angular (5.0.0, Dart 2.0.0) (назовем его my_components), который я использую во многих проектах клиентов (app_1, app_2,...). Эти приложения должны переопределять некоторые свойства CSS (например, цвета) почти каждого компонента, который должен отражать фирменный стиль клиентов. Очевидным выбором здесь было бы определить значения как переменные SASS в _variables.scss файл в пакетах app_n. (Я не могу использовать пользовательские свойства CSS, потому что требуется поддержка IE (я знаю, что IE официально не поддерживается Angular)) Проблема в том, что файлы scss компонента должны импортировать _variables.scss файл, поэтому my_components потребуется зависимость от app_n, что невозможно.

Я попытался решить это следующим образом: в my_components у меня есть файл lib/_variable.default.scss, Файлы scss компонента все еще содержат строку @import package:my_components/_variables.scss, Я написал InjectAssetsBuilder который работает с расширением.default.scss и производит файлы.scss. Строитель настраивается и ожидает сопоставление 'my_components|lib/_variables.scss': 'app_n|web/variables.scss' в конфигурации build.yaml app_n. Предполагается, что построитель запускается файлом.default.scss, а затем помещает настроенный файл рядом с ним, чтобы его можно было найти при импорте компонента.

Тем не менее, я не могу заставить его работать. Если я установлю auto_apply в all_packages (в определениях компоновщика my_components) компоновщик не получает конфигурацию отображения (из раздела целей компоновки в app_n). Если я установлю auto_apply в none, строитель больше не принимает my_components в качестве входных данных, поэтому он не может видеть и запускаться файлом.default.scss.

Если кто-то работал над подобной проблемой раньше (или имеет другую идею, как app_n может вводить переменные SASS в зависимость my_components), я бы хотел услышать их мысли. В противном случае, я был бы признателен, если бы кто-нибудь мог объяснить мне, как ограничены конфигурации сборки:

  1. Почему не auto_apply: all_packages строитель видит конфигурацию в app_n?
  2. Почему сборщик из определения цели в app_n не может видеть ресурсы в my_components?

Если вы считаете, что я допустил ошибку в конфигурации, я могу попытаться извлечь минимальный пример.

2 ответа

Решение

Оказалось, у меня были некоторые ошибки в моей конфигурации build.yaml и в самом сборщике, но я наконец запустил его. Я опубликовал свое решение в пабе: https://pub.dartlang.org/packages/inject_assets_builder

README содержит инструкции для полного рабочего примера.

Если вы используете один и тот же компонент в нескольких местах своего приложения и хотите использовать только некоторые из них, ответ nshanans - лучший выбор.

Я не верю, что генерация исходников в пакет, от которого вы зависите, является полностью поддерживаемой опцией в системе сборки.

В пакете angular_components мы выбрали альтернативный подход для компонентов, которые мы разделяем в разных клиентских приложениях. Мы остановились на системе основных стилей, которые можно применять для изменения внешнего вида.

Общий компонент построен с набором хороших стилей по умолчанию. Общий компонент также предлагает _mixins.scss файл, содержащий набор миксов Sass для импорта клиентских приложений. Миксины предназначены для корректного переопределения всех стилей, необходимых для изменения темы компонента.

Например, вот миксин, который позволяет изменить стиль переключателя.

Другие вопросы по тегам