Создание библиотеки¶
Начиная с версии Angular 6 стала доступна функция генерации Angular-библиотек с использованием @angular/cli
. Сгенерировать библиотеку можно только в уже созданном проекте следующей командой:
ng generate library ngx-custom-lib
Здесь ngx-custom-lib
- название вашей библиотеки.
Все сгенерированные библиотеки помещаются в директорию projects
, а метаданные о библиотеке добавляются в angular.json
в секцию projects
.
Для создания в библиотеке с помощью @angular/cli
, например, компонента, необходимо явно указать название проекта с помощью флага --project
.
ng generate component <component-name> --project=<library-name>
Модули и относящиеся к ним компоненты, директивы, фильтры и сервисы определяются в папке lib
и могут повторять структуру обычного приложения. Все сущности, предоставляемые модулем использующему его приложению, должны экспортироваться из public_api.ts
.
public_api.ts
export * from './lib/ngx-custom-lib.service'
export * from './lib/ngx-custom-lib.component'
export * from './lib/ngx-custom-lib.module'
Сборка библиотек аналогична сборке обычного Angular приложения.
ng build ngx-custom-lib
После этого ее можно использовать в приложении.
NgModule({
imports: [NgxCustomLibModule],
})
В библиотеку включаются только те стили, которые напрямую прописаны в свойстве компонентов styleUrls
.
Для того чтобы включить в сборку библиотеки глобальные стили, которые могут быть импортированы приложением напрямую, необходимо использовать сборщик файлов стилей.
Разберемся на примере scss. В качестве сборщика будем использовать scss-bundle
, который нужно установить в системе глобально:
npm install scss-bundle -g
Создадим в исходных файлах библиотеки директорию assets/styles
, а внутри нее файлы стилей - entry.css
, style1.scss
и style2.scss
. Причем последние два импортируются в первый.
Теперь выполним сборку стилей.
scss-bundle -e ./src/entry.scss -d bundles/main.style.scss
В параметре -e
указывается список файлов, которые должны быть объединены в файле, указанном в параметре -d
. Результирующий файл создастся по указанному пути.
Затем в приложении можно импортировать стили, например, в глобальный файл style.scss
:
@import '../projects/dist/ngx-custom-lib/bundles/main.style';
Если исходных файлов стилей в библиотеке много, то scss-bundle позволяет в качестве источника указывать файл конфигурации, в котором перечисляются все необходимые стили.