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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何确保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使用jQueryScandiLazy设置为shim的依赖(更多这里是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();
});

以上是关于如何确保Magento 2中的RequireJS在加载其他脚本之前加载jQuery?我发现嵌套需要解决这个问题的主要内容,如果未能解决你的问题,请参考以下文章

requireJS简介和一个完整实例

Magento2覆盖现有的JS组件

Magento 2 Theme Ultimate Guide - 如何创建Magento 2主题终极指南

如何从magento 2中的可配置产品中获取简单产品

Pentaho 中的 RequireJS

如何使用主干和 requirejs 定义/使用多个路由