---
metadata:
  - name: generator
    content: Diplodoc Platform v5.64.2
alternate:
  - https://yandex.ru/dev/jsapi-v2-1/doc/en/v2-1/ref/reference/modules.define.md
  - https://yandex.ru/dev/jsapi-v2-1/doc/ru/v2-1/ref/reference/modules.define.md
  - href: https://yandex.ru/dev/jsapi-v2-1/doc/ru/v2-1/ref/reference/modules.define.md
    type: text/markdown
    title: Markdown version
  - href: https://yandex.ru/dev/jsapi-v2-1/doc/ru/llms.txt?revision=r21950234
    rel: describedby
---
> **Documentation Index:** Fetch the complete configuration index at https://yandex.ru/dev/jsapi-v2-1/doc/ru/llms.txt?revision=r21950234

# modules.define

Статическая функция.

Определение модуля в модульной системе.

{% note info %}

Рекомендуется создавать собственные модули в своем пространстве имен, чтобы случано не заменить необходимые для работы API модули.

{% endnote %}

**Возвращает** ссылку на себя.

```javascript
{ modules } modules.define(module[, depends, resolveCallback[, context]])
```

**Параметры:**

#|
|| **Параметр** | **Значение по умолчанию** | **Описание**  ||
|| [`module`](#param-module)[*](*star) | — | Тип: String

Название модуля. ||
|| [`depends`](#param-depends) | — | Тип: String[]

Массив названий необходимых модулей. Этот аргумент может быть пропущен. ||
|| [`resolveCallback`](#param-resolveCallback)[*](*star) | — | Тип: Function

Функция, которая определяет модуль. Первым аргументом в resolveCallback поступит provide-функция, в которую нужно будет передать модуль. Вызов provide-функции может быть отложен во времени. Последующие аргументы - это модули, указанные в зависимостях. Порядок модулей будет соответствовать порядку в массиве depends. В случае если модуль не может быть зарезолвен, то необходимо об этом уведомить модульную систему. Это можно сделать передав в provide-функцию второй аргумент. Второй аргумент будет передан в errorCallback и в promise как ошибка в запрос модуля. Впоследствии модуль можно будет запросить повторно. ||
|| [`context`](#param-context) | — | Тип: Object

Контекст исполнения функции. ||
|#

\* Обязательный параметр/опция.

**Примеры:**

**1.**

```javascript
// Задание собственного модуля.
// 'plugin.*' – это собственное пространство имен.
ymaps.modules.define('CustomModule', function (provide) {
    var CustomModule = function (defValue) {
        this.field = defValue;
    };
    provide(CustomModule);
});
// Запрос модулей.
ymaps.modules.require(['CustomModule'])
    .spread(
        function (CustomModule) {
            // ...
        },
        this
   );
```

**2.**

```javascript
// Задание собственного асинхронного модуля.
ymaps.modules.define('CustomAsyncModule', function (provide) {
	// Для работы модуля необходимо загрузить внешний скрипт.
    $.getScript( "ajax/test.js")
        .done(function( script, textStatus ) {
            function CustomAsyncModule () {
                // ...
            }
        // Вызов provide-функции после загрузки скрипта.
        provide(CustomAsyncModule);
    });
});
// Запрос модулей.
ymaps.modules.require(['CustomAsyncModule'])
    .spread(
        function (CustomAsyncModule) {
            // ...
        },
        this
    );
```

**3.**

```javascript
// Создание пользовательского асинхронного модуля с учетом ошибки.
ymaps.modules.define('plugin.CustomModule', function (provide) {
    $.getScript( "ajax/test.js" )
        .done(function( script, textStatus ) {
            // Обработка успешной загрузки скрипта.
            provide({ a: 1 });
        })
        .fail(function( jqxhr, settings, exception ) {
            // Уведомление модульной системы о том, что модуль не может быть подготовлен прямо сейчас.
            provide(null, new Error('Обишка при загрузке'));
        });
});

// Запрос модулей с обработкой ошибок.
ymaps.modules.require(['plugin.CustomModule'])
    .spread(
        function (CustomModule) {
            // ... 
        },
        function (error) {
            console.log(error.messsage); // "Error when loading".
            // Код обработки ошибки получения модуля. Модуль можно запросить повторно.
        },
        this
    );
```

**4.**

```javascript
// Определение пользовательского модуля с зависимостями.
ymaps.modules.define('CustomLayoutModule', [
     'templateLayoutFactory', 
     'layout.storage'
], function (provide, templateLayoutFactory, layoutStorage) {
    var customLayoutClass = templateLayoutFactory.createClass(
        '<div>My Layout</div>',
        {
            build: function () {
                 customLayoutClass.superclass.build.call(this);
                 // ...
            },
            clear: function () {
                 // ...
                 customLayoutClass.superclass.clear.call(this);
            }
        }
    );
    layoutStorage.add('customLayout', customLayoutClass);
    provide(customLayoutClass);
});
// Запрос пользовательского макета
ymaps.modules.require(['CustomLayoutModule'])
    .spread(
        function (CustomLayoutModule) {
            // ...
        },
        this
   );
```

<!-- XLIFF_FARM_NTdhNjFh_CACHING -->

[*star]: Обязательный параметр.