Используйте общий код из другого пакета Angular и экспортируйте только необходимые компоненты - PullRequest
0 голосов
/ 31 мая 2019

Общая проблема

У меня есть библиотека компонентов A, которая уже существует и содержит несколько компонентов:

  • Кнопка
  • Аккордеон
  • Поле ввода
  • Таблица
  • Автозаполнение

Теперь я хочу повторно использовать некоторые компоненты (например, Поле ввода, Таблица) и предоставить разные стили для них.Однако я не хочу повторно использовать все компоненты (например, Accordion не используется для второй темы), а некоторые компоненты имеют добавленную / отличающуюся функциональность (например, кнопка).Я хотел бы опубликовать эти компоненты вместе с различными стилями в качестве независимого пакета B, который содержит только необходимый код.

Подход и проблемы

Я не хочу много кодадублирование, потому что некоторые вещи могут измениться в пакете A, который в точности должен быть повторно использован в пакете B. Поэтому моя первоначальная идея состояла в том, чтобы относительно импортировать необходимые компоненты из пакета A и просто снова экспортировать их в пакет B в файле public-api.ts и просто заменитьфайл scss глобального стиля.

Однако я получаю следующие сообщения об ошибках:

error TS6059: File '[...]' is not under 'rootDir' '[...]'. 'rootDir' is expected to contain all source files.

Я уже пытался добавить исходную папку из пакета A в части "rootDirs" внутри tsconfig.json пакета B, но безуспешно.

Возможно ли это вообще?Каков наилучший подход для такого варианта использования?

Я вижу следующие другие опции:

  • Должен ли я перемещать часто используемые компоненты в общий пакет?Тем не менее, как я могу легко адаптировать стилизацию тогда, когда компоненты уже упакованы?
  • Должен ли я создать второй public-api.ts в той же исходной папке, что и пакет A, и просто создать второй ng-пакет изта же исходная папка?

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

...