/modules

Async modular system

Primary LanguageJavaScript

Modular system NPM version Build Status

по-русски

What? Why and what for? How to use? (ru)

####Requirements####

  1. Asynchronous require for modules
  2. Asynchronous provide for modules
  3. Extending and redefining a module
  4. Assuming #3, the dependencies have to be resolved within the same generation of declarations; The generation includes the declarations within one eventloop turn.

####Why not CommonJS?#### See #1, #2 and #3 in the list of requirements.

####Why not AMD?#### See #2 and #3 in the list of requirements.

API spec

####Module declaration####

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

####Module usage####

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

####Example####

modules.define(
    'A', 
    ['B', 'C'], 
    function(provide, b, c, prev) {
        var a = {};
        provide(a);
    });

modules.define(
    'B',
    function(provide) {
        var b = {};
        provide(b);
    });

modules.define(
    'C',
    ['B'],
    function(provide, b) {
        var c = {};
        provide(c);
    });
    
modules.define( 
    'C',    
    function(provide, prevC) {
        var nextC = {};
        provide(nextC);
    });

modules.require(
  ['A'],
  function(a) {
    // module 'A' now resolved to a
  });