Sanu0074
@Sanu0074

Почему возникают проблемы с загрузкой плагинов jquery у которых есть проверка factory?

Я использую typescript, модули - commonjs. Загружаю файлы с помощью SystemJS. Понадобилось мне прикрутить этот плагин, сделал я это таким образом:
SystemJS.config({
    "defaultJSExtensions": true,
    map: {
        css: '/js/system-css.js',
    },
    meta: {
        '*.css': { loader: 'css' }
    },
    baseURL: '/',
    paths: {
        jquery: 'js/jquery',
        scrollbar: 'js/scrollbar',
        datepicker: 'js/datepicker'
    }
});

var systemLocate = System.locate;
System.locate = function (load) {
    var System = this;
    return Promise.resolve(systemLocate.call(this, load)).then(function (address) {
        return address + System.cacheBust;
    });
};
System.cacheBust = '?id=' + CONFIG.version;
System.import('js/bootstrap.js');

Получил за это:
SystemJS Multiple anonymous defines in module

Плагин scrollbar, который подключен выше - работает, т.к. в коде самого плагина нет проверки factory как в datepicker'e:
(factory) {
    if ( typeof define === 'function' && define.amd ) {
        // AMD. Register as an anonymous module.
        define(['jquery', 'jquery-mousewheel'], factory);
    } else if (typeof exports === 'object') {
        // Node/CommonJS style for Browserify
        module.exports = factory;
    } else {
        // Browser globals
        factory(jQuery);
    }
}


Что мне делать с этим - не пойму, но выковыривать проверку factory - не вариант, т.к. во многих плагинах она есть и это нормальная практика.

Кто сталкивался, подскажите что делать чтоб systemJS не ругался?
  • Вопрос задан
  • 308 просмотров
Пригласить эксперта
Ответы на вопрос 1
Это модуль в формате UMD. Angular2, например, поставляет свои модули в этом формате.

Используйте `map` вместо `path`:
SystemJS.config({
    "defaultJSExtensions": true,
    map: {
        css: '/js/system-css.js',
        datepicker: 'js/datepicker.js'
    },
    meta: {
        '*.css': { loader: 'css' }
    },
    baseURL: '/',
    paths: {
        jquery: 'js/jquery',
        scrollbar: 'js/scrollbar'
    }
});
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы