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

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

<iframe id="LIVE-EXAMPLE" style="width:100%;height: 400px;border-radius: 8px;border: 1px solid rgba(92, 94, 102, 0.14);" frameBorder="0" src="https://yastatic.net/s3/front-maps-static/maps-front-jsapi-v2-1/examples/2/out/s3-cases/ru/module_request/index.html" allow="fullscreen"></iframe>

<a target="_blank" rel="noopener noreferrer" style="display: inline-block;margin-top: 10px;cursor: pointer;border-radius: 4px;padding: 9px 12px;background: #151515;color: white;text-decoration: none;font-weight: 500" href="https://codesandbox.io/p/sandbox/wpv43d?file=index.html">Open in CodeSandbox</a>

<div id="references">
    <a href="https://yandex.ru/dev/jsapi-v2-1/doc/ru/v2-1/ref/reference/ready">ready</a>,
    <a href="https://yandex.ru/dev/jsapi-v2-1/doc/ru/v2-1/ref/reference/modules.require">modules.require</a>,
    <a href="https://yandex.ru/dev/jsapi-v2-1/doc/ru/v2-1/ref/reference/vow">vow</a>,
    <a href="https://yandex.ru/dev/jsapi-v2-1/doc/ru/v2-1/ref/reference/Map">Map</a>,
    <a href="https://yandex.ru/dev/jsapi-v2-1/doc/ru/v2-1/ref/reference/Placemark">Placemark</a>,
    <a href="https://yandex.ru/dev/jsapi-v2-1/doc/ru/v2-1/ref/reference/control.Button">control.Button</a>
</div>
    В данном примере при инициализации загружаются только модули карты и кнопки.
<br/>
    По клику кнопки происходит загрузка модуля метки.
<br/>
    Загрузку отдельных модулей можно производить при помощи метода <a href="https://yandex.ru/dev/jsapi-v2-1/doc/ru/v2-1/ref/reference/modules.require">require</a> модульной системы.
<br/>
    Метод возвращет <a href="https://yandex.ru/dev/jsapi-v2-1/doc/ru/v2-1/ref/reference/vow.Promise.xml">объект-обещание</a>, который подтверждается массивом запрошенных модулей.
<br/>
    Для удобства в примере используется метод spread, который передает в функцию данные в виде списка аргументов, а не в виде массива.
<br/>
<br/>
    API Яндекс.Карт состоит из большого количества взаимосвязанных модулей.
<br/>
    По умолчанию при подключении API происходит загрузка стандартного набора модулей (package.full), который включает в себя все необходимое для работы API.
<br/>
    Для сокращения объема загружаемого кода API можно подключать некоторые модули вместо стандартного набора.
<br/>
    Это можно сделать, указав необходимые модули в GET-параметре load. Модули перечисляются через запятую.
<br/>
    Если GET-параметр load не указан, то просходит загрузка package.full.
<br/>
    Подробнее о работе модулей смотрите в разделе <a href="https://yandex.ru/dev/jsapi-v2-1/doc/ru/v2-1/dg/concepts/modules">Модули</a>.

{% list tabs %}

-   index.html

    ```html
    <!DOCTYPE html>
    <html>
        <head>
            <title>Загрузка модуля по требованию</title>
            <meta
                http-equiv="Content-Type"
                content="text/html; charset=utf-8"
            />
            <!--
                При помощи GET параметра load можно перечислить необходимые модули API Яндекс.Карт.
    
                Укажите свой API-ключ. Тестовый ключ НЕ БУДЕТ работать на других сайтах.
                Получить ключ можно в Кабинете разработчика: https://developer.tech.yandex.ru/keys/
            -->
            
            
            
        </head>
        <body>
            <div id="map"></div>
        </body>
    </html>
    ```

-   module_request.js

    ```js
    ymaps.ready(function () {
        var myMap = new ymaps.Map("map", {
            center: [55.755381, 37.619044],
            zoom: 7,
            // Не отображаем на карте никакие стандартные элементы управления, так как они не были загружены.
            controls: [],
        });

        var loadControl = new ymaps.control.Button({
            data: { content: "Добавить метку" },
            options: { maxWidth: 200, float: "right", selectOnClick: false },
        });
        myMap.controls.add(loadControl);

        loadControl.events.add("click", function () {
            if (ymaps.Placemark) {
                // Если модуль уже был загружен, то нет необходимости повторно обращаться к модульной системе.
                addPlacemark();
            } else {
                // Загружаем по требованию класс метки и оверлея метки.
                // По умолчанию оверлей автоматически загружается после добавления метки на карту.
                // В данном примере происходит асинхронная загрузка самого модуля метки и нет необходимости в отдельной подгрузке оверлея.
                ymaps.modules
                    .require(["Placemark", "overlay.Placemark"])
                    .spread(function (Placemark, PlacemarkOverlay) {
                        // Добавляем в глобальную область видимости класс вручную,
                        // так как при использовании метода require модульной системы этого не происходит.
                        ymaps.Placemark = Placemark;
                        addPlacemark();
                    });
            }
        });

        function addPlacemark() {
            var center = myMap.getCenter();
            // Устанавливаем случайную позицию, близкую к центру карты.
            center[0] += Math.random() * 2 - 1;
            center[1] += Math.random() * 2 - 1;
            var placemark = new ymaps.Placemark(center);
            myMap.geoObjects.add(placemark);
        }
    });
    ```

{% endlist %}
