ym

Async modular system

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

Что это? Зачем и для кого? Как пользоваться?

####Требования####

  1. Асинхронный require модулей
  2. Асинхронный provide модулей
  3. Возможность передекларации/додекларации модуля
  4. С учетом пункта 3, зависимости должны разрешаться в пределах одного поколения деклараций (поколение образуют декларации модулей в пределах одного тика eventloop)

####Почему не CommonJS?#### Смотри пункты 1, 2 и 3 требований

####Почему не AMD?#### Смотри пункты 2 и 3 требований

####Объявление модуля####

void modules.define(
    String moduleName,
    [String[] dependencies],
    Function(
        Function(Object objectToProvide) provide,
        [Object resolvedDependency, ...],
        [Object previousDeclaration]
    ) declarationFunction
)

####Подключение модуля####

void modules.require(
    String[] dependencies,
    Function(
        [Object resolvedDependency, ...]
    ) callbackFunction
)

####Пример####

modules.define(
    'A', 
    ['B', 'C'], 
    function(providebcprev) {
        var a = {};
        provide(a);
    });
 
modules.define(
    'B',
    function(provide) {
        var b = {};
        provide(b);
    });
 
modules.define(
    'C',
    ['B'],
    function(provideb) {
        var c = {};
        provide(c);
    });
    
modules.define( 
    'C',    
    function(provideprevC) {
        var nextC = {};
        provide(nextC);
    });
 
modules.require(
  ['A'],
  function(a) {
    // module 'A' now resolved to a 
  });