2016-07-29 3 views
0

Я использую RequireJS 2.2.0 для моего проекта со следующей конфигурацией:RequireJS оптимизатор - Oracle MapViewer имеет более чем один анонимный определить

require.config({ 
    baseUrl: "Scripts/js/kendo", 
    paths: { 
     "kendo.datepicker.min": "kendo.datepicker.min", 
     "jquery-ui": "../../lib/jquery-ui.min", 
     "modules": "../../modules", 
     "colorpicker": "../../lib/colorpicker", 
     "eye": "../../lib/eye", 
     "layout": "../../lib/layout", 
     "utils": "../../lib/utils", 
     "oraclemaps": "../../lib/oraclemapsv2" 
    }, 
    shim: { 
     "kendo.datepicker.min": ["oraclemaps"], 
     "jquery-ui": ["oraclemaps"], 
     "colorpicker": ["jquery-ui"], 
     "eye": ["colorpicker"], 
     "layout": ["eye"], 
     "utils": ["layout"] 
    } 
}); 

oraclemaps библиотека третья сторона, которая включает в себя Jquery. Я использую их версию, поэтому я определил зависимости Kendo и jQuery-UI в прокладке. oraclemaps имеет компонент, который требует jquery-ui, colorpicker, eye, layout, and utils в указанном порядке. Это я также определил в прокладке. Приложение работает хорошо.

Проблема теперь в оптимизации. Используя конфигурацию, я получил ошибку oraclemapsv2.js has more than one anonymous define. Я googled, и я обнаружил, что это issue jQuery Hammer (который включен в oraclemaps). Запуск приложения приводит к mismatched anonymous define() module.

Я пробовал положить oraclemaps в exclude/excludeShallow и загрузить его в HTML, но я получил Script error for "jquery", needed by: jquery-ui, kendo.core.min.

Вот моя конфигурация оптимизатор:

({ 
    baseUrl: "../js/kendo", 
    paths: { 
     "kendo.datepicker.min": "kendo.datepicker.min", 
     "jquery-ui": "../../lib/jquery-ui.min", 
     "modules": "../../modules", 
     "colorpicker": "../../lib/colorpicker", 
     "eye": "../../lib/eye", 
     "layout": "../../lib/layout", 
     "utils": "../../lib/utils", 
     "oraclemaps": "../../lib/oraclemapsv2" 
    }, 
    shim: { 
     "kendo.datepicker.min": ["oraclemaps"], 
     "jquery-ui": ["oraclemaps"], 
     "colorpicker": ["jquery-ui"],    
     "eye": ["colorpicker"], 
     "layout": ["eye"], 
     "utils": ["layout"] 
    }, 
    include: ["../../lib/require.min"], 
    exclude: ["oraclemaps"], 
    name: "../../app", 
    out: "../build/app-built.js" 
}) 

Что я должен делать? Есть идеи?

ответ

0

Нет ничего, что может сделать оптимизатор r.js, чтобы понимать файлы, содержащие несколько анонимных звонков define.

Вы должны найти сборку oraclemaps, которая не включает несколько анонимных звонков define. (Это означает, что вам нужно получить jQuery и дампикера Kendo еще там, где oraclemaps.) Если такая сборка недоступна, вы можете обработать oraclemaps, чтобы вырвать дополнительные модули. Или вы можете обработать его, чтобы добавить имена в вызовы define.

+0

Можете ли вы рассказать мне, как добавлять имена в анонимный модуль? Вот, например, часть для Хаммера. a.Hammer = e, "undefined"! = typeof module && module.exports && (module.exports = e), "function" == typeof define && define.amd? define (["jquery"], function (b) {return d (a.Hammer, b)}): d (a.Hammer, a.jQuery || a.Zepto) – springrolls

+0

Вам просто нужно добавить имя в качестве первый параметр. Что-то вроде 'define (" Hammer ", [" jquery "], ...' – Louis

+0

Я попытался загрузить свой собственный jQuery и установить noConflict в true, но это не сработало. – springrolls