Перейти к содержанию

Создание библиотеки

Начиная с версии 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 позволяет в качестве источника указывать файл конфигурации, в котором перечисляются все необходимые стили.