2

У меня есть проект jQuery/Require.js/Backbone, который загружает библиотеку jQuery Datatables вместе с несколькими плагинами. Конфигурация ниже работает нормально, но это просто кажется грубым.Как настроить библиотечные плагины с Require.js?

Есть ли более элегантный способ загрузки всех этих зависимых от Datatables плагинов?

Было бы здорово, если бы было обратное свойство «deps» shim, которое загружало бы дочерние плагины после загрузки данной библиотеки.

Кроме того, в приведенной ниже конфигурации я загружаю все внешние зависимости в область приложения, потому что они буквально используются каждым видом базовой линии в моем приложении, и я не хочу, чтобы они определяли/включали их в каждый модуль.

Глупо загружать все внешние библиотеки в области приложения, а не включать их в каждый просмотр?

Я был бы очень признателен за любые рекомендации на практике. Я прочитал много связанных потоков на этом сайте и не смог найти много примеров, когда люди загружают множество зависимостей, подобных этому.

require.config({ 
    baseUrl: 'js/com/mycompany/', 
    paths: { 
     jquery: '/js/lib/jquery', 
     underscore: '/js/lib/underscore/underscore', 
     backbone: '/js/lib/backbone/backbone', 
     text: '/js/lib/require/text', 

     jqueryui: '/js/lib/ui/jquery-ui-1.10.0.custom.min', 
     json: '/js/lib/json/jquery.json-2.3.min', 
     datatables: '/js/lib/datatables/js/jquery.dataTables.min', 
     datatablesSelectable: '/js/lib/datatables/js/datatables.Selectable', 
     datatablesToggle: '/js/lib/datatables/js/jquery.groupToggle', 
     datatablesResize: '/js/lib/datatables/js/ColReorderWithResize', 
     datatablesTableTools: '/js/lib/datatables/tabletools/js/TableTools.min', 
     toaster: '/js/lib/toaster/javascript/jquery.toastmessage', 
     cookie: '/js/lib/cookie/jquery.cookie', 
     validation: '/js/lib/validation/jquery.validate', 
     validationAdditional: '/js/lib/validation/additional-methods', 
     alerts: '/js/lib/alerts/jquery.alerts', 
     loadmask: '/js/lib/loadmask/jquery.loadmask.min', 
     qtip: '/js/lib/qtip/jquery.qtip.min', 
     dropdown: '/js/lib/dropdown/jquery.dropdown', 

     extensions: '/js/com/mycompany/common/extensions', 
     app: 'app' 
    }, 
    shim: { 
     jquery: { 
      exports: '$' 
     }, 
     underscore: { 
      exports: '_' 
     }, 
     backbone: { 
      deps: ["underscore", "jquery"], 
      exports: "Backbone" 
     }, 
     jqueryui: { deps: ["jquery"] }, 

     datatables: { deps: ["jquery"] }, 
     datatablesSelectable: { deps: ["datatables"] }, 
     datatablesToggle: { deps: ["datatables"] }, 
     datatablesResize: { deps: ["datatables"] }, 
     datatablesTableTools: { deps: ["datatables"] }, 

     toaster: { deps: ["jquery"] }, 
     cookie: { deps: ["jquery"] }, 
     validation: { deps: ["jquery"] }, 
     validationAdditional: { deps: ["validation"] }, 
     alerts: { deps: ["jquery"] }, 
     loadmask: { deps: ["jquery"] }, 
     qtip: { deps: ["jquery"] }, 
     dropdown: { deps: ["jquery"] }, 
     json: { deps: ["jquery"] }, 

     extensions: { deps: ["jquery", "datatables"] } 
    } 
}); 

require([ 

    'app', 
    'extensions', 

    'backbone', 
    'jqueryui', 
    'datatables', 
    'datatablesSelectable', 
    'datatablesToggle', 
    'datatablesResize', 
    'datatablesTableTools', 
    'toaster', 
    'validation', 
    'validationAdditional', 
    'alerts', 
    'loadmask', 
    'qtip', 
    'json' 

], function(
    App, 
    extensions, 

    // including all these here because they are used by literally 
    // every view in the app. seems kinda gross 
    Backbone, 
    jqueryui, 
    datatables, 
    datatablesSelectable, 
    datatablesToggle, 
    datatablesResize, 
    datatablesTableTools, 
    toaster, 
    validation, 
    validationAdditional, 
    alerts, 
    loadmask, 
    qtip, 
    json 

    ){ 

    App.initialize(); 

}); 

Путь конфигурация может выглядеть немного странно, потому что у меня есть базовое приложение в корне «/» контекст веба-сервере (где весь общий внешний ЛИЭС Javascript расположен). Это приложение существует в подконтексте (например, «/ myapp») со своим собственным локальным js-каталогом пользовательских сценариев.

Спасибо за любой ввод!

ответ

1

Поскольку все плагины являются файлами «plain JS» в любом случае, почему бы вам просто не конкатенировать + не разрезать все плагины в один файл? Назовем его «myjqplugins.js» и есть только одна запись в paths и одну запись в shims

или, по крайней мере, CONCAT их в сплоченных группах: проверки + validationAdditional Тостер + QTIP + другие DataTables ***, как один файл.

^3 paths записей + 3 shims записей.

+0

это идея! Мне нужно посмотреть на минимизацию. Я никогда не делал этого раньше. –

+1

@NathanBeach Я настоятельно рекомендую Closure Compiler на «Простой» уровень сжатия. Он доступен в виде [загружаемого Java-бинарного файла] (https://developers.google.com/closure/compiler/) и в качестве [веб-приложения] (http://closure-compiler.appspot.com/home), где вы просто вставьте свой код, а затем скопируйте сжатый вывод из другого окна. – ddotsenko

Смежные вопросы