2015-09-21 2 views
1

Работа над проектом, который использует RequireJS, и загружает dojo/dijit/dojox/dgrid, используя Require, а не загрузчик Dojo.Можно ли загрузить пользовательскую сборку dojo с помощью RequireJS?

Я пытаюсь оптимизировать javascript для уменьшения http-звонков, а оптимизатор RequireJS, похоже, не в состоянии оптимизировать модули Dojo.

Возможно ли создать пользовательскую сборку Dojo, а затем загрузить ее с помощью RequireJS? Я пробовал несколько сборок и еще не смог заставить его работать. Последнее Dojo построить конфигурацию я попробовал (который бежал успешно) был:

var profile = { 
basePath: '../src/', 
action: 'release', 
cssOptimize: 'comments', 
mini: true, 
optimize: 'closure', 
layerOptimize: 'closure', 

packages: [ 
    'dgrid', 
    'dijit', 
    'dojo', 
    'dojox', 
    'put-selector', 
    'xstyle' 
], 

stripConsole: 'all', 
selectorEngine: 'lite', 

layers: { 
    'dojo/dojo': { 
     boot: false, 
     customBase: true, 
     include: [ 
      'dojo/_base/array', 
      'dojo/_base/declare', 
      'dojo/_base/fx', 
      'dojo/_base/lang', 
      'dojo/_base/window', 
      'dojo/_base/xhr', 
      'dojo/aspect', 
      'dojo/cache', 
      'dojo/Deferred', 
      //'dojo/dojo', 
      'dojo/dom-class', 
      'dojo/dom-construct', 
      'dojo/dom-geometry', 
      'dojo/dom-style', 
      'dojo/dom', 
      'dojo/fx', 
      'dojo/has', 
      'dojo/keys', 
      'dojo/mouse', 
      'dojo/on', 
      'dojo/promise/all', 
      'dojo/query', 
      'dojo/request/registry', 
      'dojo/request/util', 
      'dojo/sniff', 
      'dojo/string', 
      'dojo/store/Cache', 
      'dojo/store/JsonRest', 
      'dojo/store/Memory', 
      'dojo/store/Observable', 
      'dojo/store/util/QueryResults', 
      'dojo/topic', 
      'dojo/when', 
      'dojox/uuid/generateRandomUuid', 
      'put-selector/put', 
     ] 
    }, 
    'dijit/dijit': { 
     include: [ 
      'dijit/_TemplatedMixin', 
      'dijit/_Widget', 
      'dijit/dijit', 
      'dijit/form/CheckBox', 
      //'dijit/form/DateTextBox', // For some reason including this module causes the Dojo build to fail? 
      //'dijit/form/FilteringSelect', // For some reason including this module causes the Dojo build to fail? 
      //'dijit/form/MappedTextBox', // For some reason including this module causes the Dojo build to fail? 
      'dijit/form/TextBox', 
      'dijit/Menu', 
      'dijit/MenuItem', 
      'dijit/Tooltip', 
     ] 
    }, 
    'dgrid/dgrid': { 
     include: [ 
      'dgrid/CellSelection', // Set the cell selection model 
      'dgrid/ColumnSet', //Adds frozen column capabilities. 
      'dgrid/Editor', 
      //'dgrid/extensions/ColumnHider', // For some reason including this module causes the Dojo build to fail? 
      'dgrid/extensions/ColumnReorder', 
      'dgrid/extensions/ColumnResizer', 
      'dgrid/extensions/CompoundColumns', 
      'dgrid/Grid', 
      'dgrid/Keyboard', 
      'dgrid/OnDemandGrid', 
      'dgrid/Tree', 
      'dgrid/util/misc', 
      'dgrid/util/touch', 
     ] 
    }, 

}, 

staticHasFeatures: { 
    'config-deferredInstrumentation': 0, 
    'config-dojo-loader-catches': 0, 
    'config-tlmSiblingOfDojo': 0, 
    'dojo-amd-factory-scan': 0, 
    'dojo-combo-api': 0, 
    'dojo-config-api': 1, 
    'dojo-config-require': 0, 
    'dojo-debug-messages': 0, 
    'dojo-dom-ready-api': 1, 
    'dojo-firebug': 0, 
    'dojo-guarantee-console': 1, 
    'dojo-has-api': 1, 
    'dojo-inject-api': 1, 
    'dojo-loader': 0, 
    'dojo-log-api': 0, 
    'dojo-modulePaths': 0, 
    'dojo-moduleUrl': 0, 
    'dojo-publish-privates': 0, 
    'dojo-requirejs-api': 0, 
    'dojo-sniff': 1, 
    'dojo-sync-loader': 0, 
    'dojo-test-sniff': 0, 
    'dojo-timeout-api': 0, 
    'dojo-trace-api': 0, 
    'dojo-undef-api': 0, 
    'dojo-v1x-i18n-Api': 1, 
    'dom': 1, 
    'host-browser': 1, 
    'extend-dojo': 1 
}, 

}

Однако, когда я пытаюсь загрузить оптимизированные файлы слоев в требуют, он возвращает это довольно загадочное сообщение об ошибке и приложение Безразлично 't load:

Не удалось загрузить модуль корня. Подробности: has.add не является функцией

Кроме того, некоторые модули, которые отмечены комментариями выше, приведут к сбою Dojo, если я их включу. Есть идеи?

Можно ли сделать эту работу? В настоящее время мы привязаны к использованию dgrid, поэтому единственный вариант, если это не сработает, - это избавиться от RequireJS.

Заранее благодарен!

ответ

0

Вам необходимо использовать source version Dojo Toolkit. Встроенные копии модулей AMD несовместимы между загрузчиками.

+0

Спасибо за ваш ответ @mshindal. Можно ли каким-либо образом оптимизировать исходную версию Dojo, чтобы ее можно было загружать как один файл? –

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