yandex / mapsapi-modules

Async modular system
132 stars 29 forks source link

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

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], [Error error]) provide,
        [Object resolvedDependency, ...],
        [Object previousDeclaration]
    ) declarationFunction
)

Module usage

void modules.require(
    String[] dependencies,
    Function([Object resolvedDependency, ...]) successCallbackFunction,
    [Function(Error error) errorCallbackFunction]
)

Modules storage configuration

void setOptions(Object options)
Available options

Get current state of module in storage

String getState(String name)
Possible states

Check for module existence in storage

Boolean isDefined(String moduleName)

Create yet another modules storage

Modules modules.create()

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
  });