2016-07-29 4 views
0

Ich benutze RequireJS 2.2.0 für mein Projekt mit folgenden Konfiguration:RequireJS Optimierer - Oracle MapViewer hat mehr als ein anonymen definieren

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 ist eine dritte Partei-Bibliothek, die jQuery enthält. Ich benutze ihre Version, also habe ich Kendo und jQuery-UI Abhängigkeiten in Shim definiert. oracellemaps hat eine Komponente, die jquery-ui, colorpicker, eye, layout, and utils in der genannten Reihenfolge benötigt. Dies habe ich auch in Shim definiert. Die Anwendung läuft gut.

Das Problem ist jetzt mit dem Optimierer. Mit der Konfiguration habe ich einen Fehler oraclemapsv2.js has more than one anonymous define. Ich habe es gegoogelt und festgestellt, dass dies ein issue von jQuery Hammer ist (das in oraclemaps enthalten ist). Das Ausführen der App führt zu mismatched anonymous define() module.

Ich habe versucht, OracleMaps in exclude/excludeShallow und laden Sie es in HTML, aber ich habe Script error for "jquery", needed by: jquery-ui, kendo.core.min.

Hier ist meine Optimierer Konfiguration:

({ 
    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" 
}) 

Was soll ich tun? Irgendwelche Ideen?

Antwort

0

Es gibt nichts, was der r.js Optimierer tun kann, um Dateien zu verstehen, die mehrere anonyme Aufrufe enthalten.

Sie müssen ein Build von oraclemaps finden, das nicht mehrere anonyme Aufrufe enthält. (Das bedeutet, dass Sie jQuery und den Kendo-Datumsspeicher sonst wo als oraclemaps haben müssen.) Wenn solch ein Build nicht verfügbar ist, könnten Sie oraclemaps verarbeiten, um die zusätzlichen Module auszulöschen. Oder Sie könnten es so bearbeiten, um Namen zu den define Aufrufen hinzuzufügen.

+0

Können Sie mir sagen, wie man dem anonymen Modul Namen hinzufügt? Hier ist zum Beispiel der Teil für Hammer. a.Hammer = e, "undefined"! = Typ des Moduls && module.exports && (module.exports = e), "function" == typeof define && define.amd? define (["jquery"], Funktion (b) {return d (a.Hammer, b)}): d (a.Hammer, a.jQuery || a.Zepto) – springrolls

+0

Sie müssen nur den Namen als hinzufügen erster Parameter Etwas wie 'define (" Hammer ", [" jquery "], ...' – Louis

+0

) Ich habe versucht, meine eigene jQuery zu laden und noConflict auf true zu setzen, aber es hat nicht funktioniert. Ich werde es mir nochmal anschauen, haven Ich habe es lange genug versucht. " – springrolls