yandex / mapsapi-modules

Async modular system
132 stars 29 forks source link

работа со сторонними библиотеками #36

Closed Aetet closed 8 years ago

Aetet commented 10 years ago

Привет. Есть ли в модульной системе возможность работать с библиотеками которые не имеют синтаксиса ymaps/modules? Например библиотеки backbone, momentjs. Есть ли аналог shims из AMD, который бы позволял использовать эти библиотеки?

dfilatov commented 10 years ago

Прямо сейчас (и нет уверенности, что надо делать по-другому) только через модули-прокси:

modules.define('backbone', function(provide) {
    provide(Backbone);
});
qfox commented 10 years ago

@dfilatov Если только хелпер написать какой-то. Но стоит ли его одного включать в библиотеку?

@Aetet сделайте себе хелпер, он простой. Примерно так:

/**
 * @param {String} name in ym space
 * @param {Object} library provided as name
 */
function defineAndProvide(name, library) {
  modules.define(name, function (provide) {
    provide(library);
  });
}

И дальше в нужном месте:

defineAndProvide('backbone', Backbone);

Важно, что такие зависимости можно загружать динамически. Например, https://github.com/factorymn/bem-factory/blob/753e622c17518e51c797420f0deb105be0cf2cb9/common.blocks/jquery/__ui/jquery__ui.browser.js

Guria commented 9 years ago

@zxqfox

https://github.com/factorymn/bem-factory/blob/753e622c17518e51c797420f0deb105be0cf2cb9/common.blocks/jquery/__ui/jquery__ui.browser.js

У меня этот способ работает только при наличии jQuery в window. Как библиотеке подсунуть jquery уже загруженный в ymodules?

Guria commented 9 years ago

Пока сделал так:

var jQuery;

modules.define(
  'kendo',
  ['loader_type_js', 'jquery'],
  function(provide, loader, $) {
    jQuery = $;
    function doProvide(kendo){
      provide(kendo);
      delete window.jQuery;
      delete window.kendo;
    }
    typeof kendo !== 'undefined'?
        doProvide(kendo) :
        loader(
            'http://cdn.kendostatic.com/2014.1.318/js/kendo.all.min.js',
            function() { doProvide(kendo); });
});

На сколько это правильный/оправданный подход?

qfox commented 9 years ago

@Guria похоже, что у тебя 2 копии jQuery загружается. В остальном — ок