Magento2 용 모듈을 개발 중이며 requirejs를 사용하여 jquery에 의존하는 사용자 정의 자바 스크립트를로드하고 있습니다. requirejs-config.js에서 shim 옵션을 사용하여 사용자 정의 스크립트와 jquery 사이 에이 종속성을 설정하고 있습니다. 문제는이 종속성이 (항상) 설정되어 있지 않다는 것입니다. 때로는 jQuery가 스크립트 전에로드되고 모두 괜찮지 만 때로는 스크립트 후에로드되어 스크립트 오류가 발생합니다.
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
아래의 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']
}
};
이것은 내 phtml 파일의 자바 스크립트입니다.
require(['jquery', 'domReady!', 'picturefill', 'flexslider', 'easing', 'hoverintent', 'fitvids', 'vimeo'], function($) {
"use strict";
// javascript here
});
내가 잘못하고있는 것은 shim 옵션이 존중되지 않는 이유는 무엇이며 jQuery가 항상 다른 스크립트보다 먼저로드되는 것은 아닙니다.