Tôi đang phát triển một mô-đun cho Magento2 và tôi đang sử dụng các yêu cầu để tải javascript tùy chỉnh phụ thuộc vào jquery. Tôi đang sử dụng tùy chọn shim trong requestjs-config.js để đặt sự phụ thuộc này giữa các tập lệnh tùy chỉnh và jquery. Vấn đề là sự phụ thuộc này không (luôn luôn) được đặt ra. Đôi khi jQuery tải trước tập lệnh và tất cả đều ổn nhưng đôi khi nó tải sau tập lệnh dẫn đến lỗi tập lệnh:
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
Xem bên dưới một ví dụ về requestjs-config.js của tôi:
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']
}
};
Đây là javascript trong tệp phtml của tôi:
require(['jquery', 'domReady!', 'picturefill', 'flexslider', 'easing', 'hoverintent', 'fitvids', 'vimeo'], function($) {
"use strict";
// javascript here
});
Tôi đang làm gì sai ở đây, tại sao tùy chọn shim không được tôn vinh và jQuery không phải lúc nào cũng được tải trước các tập lệnh khác.