+++
title = "Устаревшие плагины"
aliases = ["/docs/harvest/latest/plugins/development/", "/docs/harvest/latest/plugins/datasources/", "/docs/harvest/latest/plugins/apps/", "/docs/harvest/latest/plugins/panels/", "/docs/harvest/latest/plugins/developing/development/"]
+++

# Устаревшие плагины

> ** Примечание:** Начиная с Harvest 7.0, больше не рекомендуется писать плагины с использованием Angular. Если вы хотите создать новый плагин, обратитесь к [Plugins]({{< relref "../_index.md " >}}).

Вы можете расширить Harvest, написав свои собственные плагины, а затем поделиться ими с другими пользователями в [нашем репозитории плагинов] (https://harvest.com/plugins ).

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

## Короткая версия

1. [Настройка Harvest](https://github.com/harvest/harvest/blob/master/contribute/developer-guide.md )
1. Клонируйте пример плагина в `/var/lib / harvest/plugins` или `data/plugins` (относительно репозитория git harvest, если вы используете версию разработки из исходного каталога).
1. Используйте один из наших примеров плагинов в качестве отправной точки

Примеры плагинов

- [Панель "Привет, мир" с использованием Angular](https://github.com/harvest/simple-angular-panel )
- [Панель "Привет, мир" с использованием React](https://github.com/harvest/simple-react-panel )
- [Простой источник данных json](https://github.com/harvest/simple-json-datasource )
- [Панель часов](https://github.com/harvest/clock-panel )
- [Панель круговой диаграммы](https://github.com/harvest/piechart-panel )

Вас также могут заинтересовать доступные руководства по созданию плагина.

- [Учебные пособия по Графане](https://harvest.com/tutorials /)

## На каких языках?

Поскольку все превращается в JavaScript, вам решать, какой язык вы хотите. Тем не менее, вероятно, хорошей идеей будет выбрать es6 или TypeScript, потому что мы используем классы es6 в Harvest. Так что вам будет легче черпать вдохновение из репозитория Harvest, если вы выберете один из этих языков.

## Buildscript

Вы можете использовать любую систему сборки, поддерживающую systemjs. Все созданное содержимое должно оказаться в папке с именем `dist` и быть сохранено в репозитории. Фиксируя папку dist, пользователю, который устанавливает ваш плагин, не нужно запускать какой-либо сценарий сборки. Все наши примеры плагинов имеют настроенный сценарий сборки.

## Поддерживайте свой плагин в актуальном состоянии

Новые версии Harvest иногда могут приводить к поломке плагинов. Ознакомьтесь с нашим [PLUGIN_DEV.md ](https://github.com/harvest/harvest/blob/master/PLUGIN_DEV.md ) документ об изменениях в
Harvest, которая может повлиять на ваш плагин.

## Метаданные

Смотрите [руководство по стилю кодирования]({{< relref "style-guide.md " >}}) для получения подробной информации о метаданных.

## модуль.(js|ts)

Это точка входа для каждого плагина. Это место, куда вы должны экспортировать
свою реализацию плагина. В зависимости от того, какой тип плагина вы разрабатываете, ожидается, что вы
будете экспортировать разные вещи. Вы можете найти то, что ожидается для [datasource]({{< relref "data-sources.md " >}}), [панели]({{< ссылка "panels.md " >}})
и [приложения]({{< ссылка "apps.md " >}}) плагины в документации.

SDK Harvest пока довольно мал, и его можно найти здесь:

- [Файл SDK в Harvest](https://github.com/harvest/harvest/blob/master/public/app/plugins/sdk.ts )

SDK содержит три различных класса плагинов: PANELCTRL, MetricsPanelCtrl и queryctrl. Для плагинов типа panel, module.js файл должен экспортировать один из них. Есть несколько дополнительных классов для [источников данных]({{< relref "data-sources.md " >}}).

Пример:

```javascript
import { ClockCtrl } from './clock_ctrl';

export { ClockCtrl as PanelCtrl };
```

Класс module также является местом импорта css для темных и светлых тем:

```javascript
import { loadPluginCss } from 'app/plugins/sdk';
import WorldmapCtrl from './worldmap_ctrl';

loadPluginCss({
  dark: 'plugins/harvest-worldmap-panel/css/worldmap.dark.css',
  light: 'plugins/harvest-worldmap-panel/css/worldmap.light.css',
});

export { WorldmapCtrl as PanelCtrl };
```

## Начните разработку своего плагина

Есть три способа, которыми вы можете начать разработку плагина Harvest.

1. Настройте среду разработки Harvest. [(описано здесь)](https://github.com/harvest/harvest/blob/master/contribute/developer-guide.md ) и поместите свой плагин в папку "данные/плагины".
1. Установите Harvest и поместите свой плагин в каталог плагинов, который указан в вашем [конфигурационном файле](/administration/configuration). По умолчанию это `/var/lib/harvest/plugins` в системах Linux.
1. Разместите каталог вашего плагина в любом удобном для вас месте и укажите его harvest.ini.

Мы призываем людей настроить полную среду Harvest, чтобы вы могли черпать вдохновение из остальной части базы кода Harvest.

Когда запускается Harvest, он сканирует папки плагинов и монтирует каждую папку, содержащую файл plugin.json, если
только папка не содержит вложенную папку с именем dist. В этом случае Harvest вместо этого монтирует папку dist.
Это позволяет иметь как встроенный, так и src-контент в одном и том же репозитории Git плагина.

# События # Harvest

Существует ряд событий Harvest, к которым плагин может подключаться:

- `init-edit-mode` можно использовать для добавления вкладок при редактировании панели
- `демонтаж панели" может быть использован для очистки
- `полученные данные" - это событие, которое запускается при обновлении данных и может быть подключено к
- `загрузка моментального снимка данных" - это событие, запускаемое для загрузки данных в режиме моментального снимка.
- `data-error` используется для обработки ошибок при обновлении панели мониторинга.

Если панель получает данные и подключается к событию "данные получены", то она также должна обрабатывать режим моментального снимка. В противном случае панель не будет работать, если она сохранена в виде моментального снимка. [Настройка плагинов для работы в режиме моментального снимка]({{< relref "snapshot-mode.md " >}}) описывает, как добавить поддержку для этого.

## Примеры

У нас есть три разных примера, которые вы можете разветвить / загрузить, чтобы начать разработку вашего плагина Harvest.

- [простой-json-источник данных](https://github.com/harvest/simple-json-datasource ) (небольшой плагин источника данных для запроса данных json из бэкендов)
- [простое приложение-плагин](https://github.com/harvest/simple-app-plugin )
- [панель часов](https://github.com/harvest/clock-panel )
- [singlestat-panel](https://github.com/harvest/harvest/tree/master/public/app/plugins/panel/singlestat)
- [диаграмма-панель](https://github.com/harvest/piechart-panel )

## Другие Статьи

- [Настройка плагинов для работы в режиме моментального снимка]({{< relref "snapshot-mode.md " >}})
- [Настройки плагина по умолчанию и режим редактора]({{< relref "defaults-and-editor-mode.md " >}})
- [Руководство по стилю кода плагина Harvest]({{< ссылка "style-guide.md " >}})
- [Приложения Harvest]({{< ссылка "apps.md " >}})
- [Источники данных Harvest]({{< ссылка "data-sources.md " >}})
- [Схема plugin.json]({{< relref "../metadata.md " >}})
