如何确保Magento 2中的RequireJS在加载其他脚本之前加载jQuery?我发现嵌套需要解决这个问题



我正在尝试加载一个需要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使用shimjQuery设置为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: {
...
},
};

相关内容

最新更新