我正在尝试加载一个需要jQuery才能运行的惰性加载器插件。 如果我这样写脚本:
require([
"jquery",
"ScandiLazy",
], function ($) {
jQuery('.category-products .lazy').lazy();
});
我得到:
"jquery.lazy.min.js:43 Uncaught TypeError: Cannot read property 'fn' of undefined",
其次:
Uncaught TypeError: jQuery(...).lazy is not a function
这是一个错误,因为 jQuery 未加载。
但是如果我嵌套要求:
require([ "jquery"], function ($) {
require([ "ScandiLazy"], function ($) {
jQuery('.category-products .lazy').lazy();
});
});
然后它完美地工作。
但是为了使其工作而嵌套需求感觉不对,这实际上是一种正确的方法吗?
如果这是不正确的,有什么方法可以绝对确保在加载 ScandiLazy 延迟加载插件之前加载 jQuery?
ScandiLazy
需要jQuery才能工作,所以你必须告诉RequireJS使用shim
将jQuery
设置为ScandiLazy
的依赖项(更多在这里 https://requirejs.org/docs/api.html#config-shim(。如何解决此问题的快速示例:
requirejs.config({ // configure RequireJS first
shim: {
'path/to/ScandiLazy': ['jquery']
}
});
require([ // load modules
"jquery",
"ScandiLazy",
], function ($) {
jQuery('.category-products .lazy').lazy();
});
我认为 M2 中的正确方法是将其添加到您的模块/主题requirejs-config.js
var config = {
shim: {
'ScandiLazy': ['jQuery']
},
map: {
...
},
};