---
metadata:
  - name: generator
    content: Diplodoc Platform v5.39.1
alternate:
  - https://yandex.com.tr/dev/jsapi-v2-1/doc/en/v2-1/dg/concepts/modules.md
  - https://yandex.com.tr/dev/jsapi-v2-1/doc/ru/v2-1/dg/concepts/modules.md
---
> **Documentation Index:** Fetch the complete configuration index at https://yandex.com.tr/dev/jsapi-v2-1/doc/ru/llms.txt

# Модульная система

[Загрузка модулей при подключении API](#load)

[Загрузка модулей по требованию](#require)

[Подключение аддонов](#addons)

[Создание собственных модулей](#define)

API Яндекс Карт разработан с использованием концепции модульности.

В качестве модулей выступают отдельные именованные сущности, например классы, статические объекты, функции. Список всех модулей API приведен в [справочнике](https://yandex.com.tr/dev/jsapi-v2-1/doc/ru/v2-1/ref/concepts/About.md).

## Загрузка модулей при подключении API {#load}

Загружаемые модули задаются HTTP-параметром `load` в строке [подключения API](https://yandex.com.tr/dev/jsapi-v2-1/doc/ru/v2-1/dg/concepts/load.md). Можно указать сразу несколько модулей, разделив их запятым. По умолчанию параметр `load` принимает значение `package.full`, то есть загружаются все основные модули, необходимые для работы API.

```xml

```

Загруженные модули будут включены в публичное пространство имен `ymaps`.

Если для работы заданных модулей требуются другие модули, то они будут загружены автоматически.

В [песочнице](http://api.yandex.ru/maps/jsbox/2.1/load_modules) продемонстрирован пример загрузки модулей через параметр `load`.

## Загрузка модулей по требованию {#require}

Функция [modules.require](https://yandex.com.tr/dev/jsapi-v2-1/doc/ru/v2-1/ref/reference/modules.require.md) позволяет загружать модули по требованию:

```javascript
if (!ymaps.Map) {
    ymaps.modules.require(['Map', 'Placemark'], function (Map, Placemark) {
        // Нужно вручную добавить класс в пространство имен ymaps,
        // так как при использовании метода require()
        // этого не происходит.
        ymaps.Map = Map;
        var map = new ymaps.Map('map', { 
            center: [55.76, 37.64], 
            zoom: 10    
        });
        // Класс Placemark не добавлен в публичную область видимости.
        var placemark = new Placemark([55.55, 37.00]);
        map.geoObjects.add(placemark);
    });
}
```

Поскольку для работы загруженных модулей может потребоваться загрузка других модулей, функция `modules.require` поддерживает работу в асинхронном режиме. Когда данные, необходимые для работы указанных модулей, будут подготовлены, она вызовет callback-функцию с загруженными модулями.

Пример загрузки модулей по требованию приведен в [песочнице](http://api.yandex.ru/maps/jsbox/2.1/module_request).

## Подключение аддонов {#addons}

Отображение балуна и хинта геообъекта осуществляется с помощью полей `balloon` и `hint` класса [GeoObject](https://yandex.com.tr/dev/jsapi-v2-1/doc/ru/v2-1/ref/reference/GeoObject.md). Для инициализации этих полей необходимо подключить модули [geoObject.addon.balloon](https://yandex.com.tr/dev/jsapi-v2-1/doc/ru/v2-1/ref/reference/geoObject.addon.balloon.md) и [geoObject.addon.hint](https://yandex.com.tr/dev/jsapi-v2-1/doc/ru/v2-1/ref/reference/geoObject.addon.hint.md). Если требуется открыть балун или хинт, принадлежащие карте, необходимо подключить соответственно модули [map.addon.balloon](https://yandex.com.tr/dev/jsapi-v2-1/doc/ru/v2-1/ref/reference/map.addon.balloon.md) и [map.addon.hint](https://yandex.com.tr/dev/jsapi-v2-1/doc/ru/v2-1/ref/reference/map.addon.hint.md).

Если необходима возможность редактирования геометрии геообъекта, следует подключить [geoObject.addon.editor](https://yandex.com.tr/dev/jsapi-v2-1/doc/ru/v2-1/ref/reference/geoObject.addon.editor.md).

Пример подключения аддонов можно посмотреть в [песочнице](http://api.yandex.ru/maps/jsbox/2.1/load_modules).

## Создание собственных модулей {#define}

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

Декларация модуля производится с помощью метода [modules.define](https://yandex.com.tr/dev/jsapi-v2-1/doc/ru/v2-1/ref/reference/modules.define.md). Пример декларации и использования собственного модуля можно посмотреть в [песочнице](http://api.yandex.ru/maps/jsbox/2.1/custom_module).

Декларация модулей может быть совершена до вызова обработчика [ymaps.ready](https://yandex.com.tr/dev/jsapi-v2-1/doc/ru/v2-1/ref/reference/ready.md).

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

{% note info %}

Пользовательские модули не добавляются автоматически в общее пространство имен с модулями API. Доступ к объявленному модулю можно получить через асинхронный метод [modules.require](https://yandex.com.tr/dev/jsapi-v2-1/doc/ru/v2-1/ref/reference/modules.require.md), который вернет объект-promise.

{% endnote %}

```javascript
ymaps.modules.require(['PlacemarkButton'])
  .spread(function (PlacemarkButton) {
    myMap.controls.add(new PlacemarkButton('Кликните, чтобы добавить метку'));
});
```

