Skip to content
This repository was archived by the owner on Aug 3, 2023. It is now read-only.

Add possibility to load external modules#31

Open
zt-sv wants to merge 10 commits intoyandex:masterfrom
zt-sv:master
Open

Add possibility to load external modules#31
zt-sv wants to merge 10 commits intoyandex:masterfrom
zt-sv:master

Conversation

@zt-sv
Copy link

@zt-sv zt-sv commented May 8, 2014

Для своего проекта была необходимость подгружать модули из вне, если они существуют. Внешней утилитой создается JSON соответствия имени модуля файлу в котором он находится. Сделал две внешние функции findDep и loadModule. Первая ищет модуль, вторая загружает модуль если он в принципе существует.

Пример загрузки внешних модулей при помощи загрузчика LAB.js.

var modulesDep = {"cart/cartItemView":"cart.js","mainMenu":"mainMenu.js","mainMenu/mainMenuView":"mainMenu.js"};

modules.setOptions({
    findDep: function( dep ) {
        return modulesDep.hasOwnProperty(dep);
    },

    loadModule: function( moduleName, callback ) {
        var
            filename = modulesDep[moduleName];
        // end of vars

        console.log('loading module', filename);

        $LAB.script( filename ).wait(callback);
    };
});

modules.js Outdated
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Если нужно загрузить 2 модуля, которые находятся в зависимостях, то, судя по всему, он будут загружены последовательно?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Да, так и есть.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

А зачем их грузить последовательно, если их нужно запускать последовательно? И то не всегда.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

У меня загрузчик опциональный, и в него управление передается только когда в момент вызова модуля его нет в системе. Поэтому получилась последовательная загрузка. По скольку в моем проекте модули, которые часто используются друг с другом, находятся в одном файле, я не придал последовательной загрузке большого значения.
Можно переделать - проверять и загружать зависимые модули до их вызова.

@zt-sv
Copy link
Author

zt-sv commented Aug 24, 2014

Сделал загрузку асинхронной: в опциях задается функция loadModules, в которую передается массив имен модулей, которые необходимо загрузить. В тестах сделал ассинхронную загрузку нескольких модулей.

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants