Ich entwickle ein Modul für Magento2 und verwende requirejs, um benutzerdefiniertes Javascript zu laden, das von jquery abhängt. Ich verwende die Shim-Option in requirejs-config.js, um diese Abhängigkeit zwischen den benutzerdefinierten Skripten und jquery festzulegen. Das Problem ist, dass diese Abhängigkeit nicht (immer) festgelegt ist. Manchmal wird jQuery vor dem Skript geladen und alles ist in Ordnung, aber manchmal wird es nach den Skripten geladen, was zu einem Skriptfehler führt:
Uncaught ReferenceError: jQuery is not defined(anonymous function) @ jquery.easing.1.3.js:39
Uncaught ReferenceError: jQuery is not defined(anonymous function) @ jquery.flexslider-min.js:5
Uncaught TypeError: $(...).flexslider is not a function
Unten sehen Sie ein Beispiel für meine requirejs-config.js:
var config = {
map: {
'*': {
'flexslider': 'Vendor_Modulejs/jquery.flexslider-min',
'picturefill': 'Vendor_Modulejs/picturefill.min',
'easing': 'Vendor_Modulejs/jquery.easing.1.3',
'hoverintent': 'Vendor_Modulejs/jquery.hoverIntent',
'fitvids': 'Vendor_Modulejs/jquery.fitvids',
'vimeo': 'Vendor_Modulejs/jquery.vimeo.api.min'
}
},
shim: {
'flexslider': ['jquery'],
'picturefill': ['jquery'],
'easing': ['jquery'],
'hoverintent': ['jquery'],
'fitvids': ['jquery'],
'vimeo': ['jquery']
}
};
Dies ist das Javascript in meiner HTML-Datei:
require(['jquery', 'domReady!', 'picturefill', 'flexslider', 'easing', 'hoverintent', 'fitvids', 'vimeo'], function($) {
"use strict";
// javascript here
});
Was mache ich hier falsch, warum wird die Shim-Option nicht berücksichtigt und jQuery wird nicht immer vor den anderen Skripten geladen.