Stencil предоставляет удобный механизм для автоматической генерации документации компонентов, что значительно упрощает процесс разработки, поддержки и использования библиотек компонентов. Этот функционал особенно полезен для крупных проектов и позволяет поддерживать актуальность документации, синхронизируя её с изменениями в коде компонентов. В Stencil документация формируется в формате JSDoc, что позволяет интегрировать автогенерацию в процессы CI/CD, автоматически создавая документацию при каждом изменении кода.
Stencil поддерживает создание документации из аннотаций JSDoc,
встроенных в исходный код компонентов. Для того чтобы включить
автоматическую генерацию документации, необходимо использовать
соответствующие параметры в конфигурационном файле
stencil.config.ts.
Пример базовой конфигурации автогенерации документации:
import { Config } from '@stencil/core';
export const config: Config = {
namespace: 'myComponentLibrary',
generateDocumentation: true,
outputTargets: [
{
type: 'docs',
dir: './docs',
},
],
};
В этом примере включается опция generateDocumentation,
которая отвечает за создание документации, а также настраивается
выходной каталог, в который будет сохранена сгенерированная
документация.
Генерируемая документация имеет структуру, аналогичную документации JSDoc. Она будет включать описание компонентов, их методов, свойств и событий, если они были корректно аннотированы в исходном коде.
Пример аннотации компонента с использованием JSDoc:
/**
* Кнопка, которая изменяет текст при нажатии.
* @component
* @name my-button
* @description Этот компонент представляет собой кнопку, которая меняет свой текст при клике.
*/
@Component({
tag: 'my-button',
styleUrl: 'my-button.css',
shadow: true,
})
export class MyButton {
/**
* Текст, отображаемый на кнопке.
* @type {string}
* @default 'Click me!'
*/
@Prop() label: string = 'Click me!';
@Event() buttonClick: EventEmitter;
handleClick() {
this.buttonClick.emit();
}
render() {
return (
<button onCl ick={() => this.handleClick()}>{this.label}</button>
);
}
}
В данном примере компонент описан с помощью аннотаций JSDoc. Такие аннотации позволяют Stencil автоматом извлекать важные метаданные для генерации документации:
Автогенерация документации извлекает эти метаданные и формирует на их основе структурированную документацию.
После того как документация сгенерирована, она сохраняется в
указанной директории (например, ./docs). Эта документация
может быть использована для создания статических сайтов, интеграции с
системой документации (например, с использованием Docusaurus или других
инструментов) или просто быть доступной в виде HTML-файлов.
Каждый компонент будет представлен на своей странице с подробным описанием его интерфейса: свойств, методов и событий. В документации также могут быть включены примеры использования компонента, что облегчает его внедрение в проекты.
Stencil предоставляет несколько дополнительных параметров для настройки автогенерации документации:
docsTypes: Этот параметр позволяет
указать, какие типы файлов должны быть включены в документацию. По
умолчанию документация генерируется для всех компонентов, но с помощью
этого параметра можно ограничить её генерацию только для определённых
типов файлов (например, только для компонента или только для
интерфейсов).
docsDir: Указывает директорию, в
которую будет сохранена документация. Это может быть полезно, если
необходимо изменить стандартный путь.
Пример настройки дополнительных параметров:
export const config: Config = {
namespace: 'myComponentLibrary',
generateDocumentation: true,
outputTargets: [
{
type: 'docs',
dir: './docs',
docsTypes: ['component', 'interface'],
},
],
};
Генерируемая документация Stencil будет представлять собой статические HTML-страницы, оформленные в структуре, схожей с документацией на сайте. Включаются следующие разделы:
Данная структура позволяет пользователю быстро разобраться в использовании компонента и его характеристиках.
Документация, сгенерированная с помощью Stencil, может быть использована в рамках более сложных инструментов. Например, можно интегрировать её с системой контроля версий, чтобы она автоматически обновлялась с каждым коммитом, или настроить публикацию документации в публичные репозитории, такие как GitHub Pages.
Также можно интегрировать с инструментами для создания документации, например:
Stencil позволяет документировать не только компоненты, но и TypeScript интерфейсы, классы и типы данных. Использование типов в документации улучшает понимание кода и упрощает интеграцию компонентов в проекты.
Пример документации интерфейса:
/**
* Интерфейс для описания настроек компонента.
* @interface
* @name ButtonSettings
*/
export interface ButtonSettings {
/**
* Размер кнопки.
* @type {string}
* @default 'medium'
*/
size?: string;
/**
* Цвет кнопки.
* @type {string}
* @default 'blue'
*/
color?: string;
}
Генерация документации для интерфейсов помогает понять, как правильно использовать типы в компонентах и какие настройки доступны для кастомизации.
Автогенерация документации в Stencil упрощает процесс разработки и поддержания актуальности документации для компонентов. Благодаря интеграции с JSDoc и гибкой настройке можно автоматически генерировать подробную, структурированную документацию, которая всегда будет синхронизирована с кодом. Это повышает удобство разработки и облегчает взаимодействие с компонентами для других разработчиков и пользователей библиотеки.